Das könnte eine alberne und dumme Sache sein - aber ich würde gerne verstehen, was hier passiert.std :: bind auf Mitglied mit Call Operator
Ich habe den folgenden Code:
#include <iostream>
#include <functional>
namespace
{
struct call
{
void operator()() const
{
std::cout << "call::operator()" << std::endl;
}
};
struct dummy
{
dummy() = default;
dummy(const dummy&) = delete;
call member;
};
}
So Mitglied im Wesentlichen wie jedes andere Objekt Methode funktionieren würde, so dass sie als aufgerufen werden:
dummy d;
d.member()
Welche call::operator()
drucken.
Nun möchte Ich mag binden verwenden, das zu tun, sah die erste Implementierung wie folgt aus:
int main()
{
dummy d;
auto b = std::bind(&dummy::member, &d);
b();
return 0;
}
Dies kompiliert, aber nichts gedruckt wird. Ich verstehe nicht wirklich, was passiert - die Tatsache, dass es kompiliert, produziert aber keine Ausgabe Rätsel mich :) sicherlich etwas Magie geht in den Bauch von std::bind
, aber was?
Hier ist ein Link mit dem Code zu spielen: https://ideone.com/P81PND
Sie haben Recht! :) Das haben wir gerade selbst herausgefunden. 'std :: bind' wird nur das Mitglied zurückgeben, hat heute etwas Neues gelernt - danke! – mortenvp
@mortenvp: Lambdas rendern 'std :: bind' sowieso ziemlich nutzlos. Es wurde diskutiert, es in einer zukünftigen Version von C++ abzulehnen. Siehe http://stackoverflow.com/questions/33835922/why-should-bind-be-deprezed –
@ Jarod42, und überraschend, 'std :: cref' - siehe unten. –