Bu örnek, (https://ideone.com/RpFRTZ)mem_fun + bind2nd
Bu etkili ilişkisiz bir tip Bar
bir parametreye sahiptir ve Foo::comp (const Foo& a)
arayacak dikkate rasgele bir tipte bir bağımsız değişken ile bir yöntem açmasına olanak sağlar. Ben std::cout << "a = " << a.s << std::endl;
dışarı yorum yaparsanız bu derleme, aynı zamanda her nasılsa çalışıyor kalmıyor ve baskılar
Ben Ama ... yeterince adil olan, çalışma sırasında parçalama arızası daha değer yazdırmak yoksa Result: 0
neden ilk derliyor yerleştirin?
#include <functional>
#include <string>
#include <iostream>
struct Foo
{
bool comp(const Foo& a)
{
std::cout << "a = " << a.s << std::endl;
return a.s == s;
}
std::string s;
};
struct Bar
{
int a;
};
template <class F, class T>
void execute (F f, T a)
{
std::cout << "Result: " << f (a) << std::endl;
}
int main()
{
Foo* f1 = new Foo;
f1->s = "Hello";
Foo f2;
f2.s = "Bla";
Bar b;
b.a = 100;
execute (std::bind2nd (std::mem_fun(&Foo::comp), b), f1);
return 0;
}
Lütfen, 'std :: mem_fun' ve 'std :: bind2nd' öğelerinin C++ 11'de kullanımdan kaldırıldığını ve C + 17'de kaldırıldığını unutmayın. –
Ayrıca, değiştirilen işlevleri kullanarak, beklenen sonucu (https://ideone.com/9lFJat) ve daha "yararlı" hata iletisini alırsınız. –
@Bob__, evet Bunu biliyorum. Bu hatayı, henüz C++ 11'e geçirilemeyen eski bir kodda bulduk – cppalex