Std::kullanarak üye işlevi ile bağlamak, ya da bu bağımsız değişken için işaretçi nesne kullanmak?
Bağlamak için std::bind
üye fonksiyonu kullanılırken, ilk bağımsız değişken nesneleri this
işaretçi. Her iki nesnenin geçici bir işaretçi olarak çalışır ve ancak.
Örneğin bakın şu programı:
#include <iostream>
#include <functional>
struct foo
{
void bar(int v) { std::cout << "foo::bar - " << v << '\n'; }
};
int main()
{
foo my_foo;
auto f1 = std::bind(&foo::bar, my_foo, 1);
auto f2 = std::bind(&foo::bar, &my_foo, 2);
f1();
f2();
}
Hem çınlama ve GCC şikayet olmadan bu derler ve sonuç Her iki bağlar için çalışır:
foo::bar - 1 foo::bar - 2
Belirtimi (bölüm 20.8.9) kafamda bir yere oturtmaya çalışıyorum ama uzak bana bu yerlerden biri.
Bir doğru olması gerekir, ya da her ikisi de doğru mu?
CEVAP
Her ikisi de doğru. 20.8.9.1.2 iletir gereksinimleri tanımlamak için 20.8.2 ve bind
aramanız etkisi. 20.8.2
20.8.2 Gereksinimleri [işlev.gerektirir]
1TanımlayınÇAĞIRMAKŞöyle:
(f, t1, t2, ..., tN)
—
(t1.*f)(t2, ..., tN)
f
bir işaretçi bir üye işlevi bir sınıfT
t1
bir nesnenin türüT
ya da başvuru için bir nesnenin türüT
veya bir başvuru için bir nesne, bir tür türetilmişT
;
f
bir sınıfın bir üye işlev işaretçisi —((*t1).*f)(t2, ..., tN)
T
t1
türleri önceki öğe ile tarif değil;—
t1.*f
N == 1
f
bir işaretçi üye veri bir sınıfT
t1
bir nesnenin türüT
veya bir başvuru için bir nesnenin türüT
veya bir başvuru için bir nesne, bir tür türetilmişT
;—
(*t1).*f
N == 1
f
bir işaretçi üye veri sınıfıT
t1
değil bir tür tarif önceki öğe;Diğer tüm durumlarda —
f(t1, t2, ..., tN)
.
İlk iki seçenek bir referans ve bir işaretçi hem izin ver.
Burada dikkat etmeniz gereken en önemli şey ifade ediyordeğilnormal işaretçiler ile sınırlama. Alabilirsin diye std::shared_ptr
veya başka bir akıllı işaretçi tutmaya örneği hayattayken bağlı ve hala iş ile std::bind
t1
başvuru yapıldı, ne olursa olsun (verilen, tabii ki, bu mümkün).
JavaScript işlevi için bağımsız değişk...
Nasıl nesne yönelimli programlamada iç...
Nasıl KİMLİĞİ için bir değişken kullan...
(Ya da ihmal) kullanmak için zaman var...
Neden nesne yerine bir işaretçi kendis...