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)fbir işaretçi bir üye işlevi bir sınıfTt1bir nesnenin türüTya da başvuru için bir nesnenin türüTveya bir başvuru için bir nesne, bir tür türetilmişT;
fbir sınıfın bir üye işlev işaretçisi —((*t1).*f)(t2, ..., tN)Tt1türleri önceki öğe ile tarif değil;—
t1.*fN == 1fbir işaretçi üye veri bir sınıfTt1bir nesnenin türüTveya bir başvuru için bir nesnenin türüTveya bir başvuru için bir nesne, bir tür türetilmişT;—
(*t1).*fN == 1fbir işaretçi üye veri sınıfıTt1değ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...