[gelöst] C++0x: std::bind-Ergebnis an std::function binden?
-
Hallo zusammen, ich hab grade ein etwas größeres Problem auf die folgenden Zeilen eingedampft:
#include <functional> class ServerEvent; struct Server { typedef std::function<void(ServerEvent const&)> Callback; Callback cb; Server(Callback const& c) : cb(c) {} }; struct EventHandler { void handleEvent(ServerEvent const&) {} }; int main() { EventHandler eh; Server s(std::bind(&EventHandler::handleEvent, &eh)); }Das wäre jetzt so mein naiver Ansatz gewesen, dem Server seinen Callback mitzugeben. Sollte sich auch von selbst erklären, was gewollt ist. Nur spuckt mir MSVC2010 jetzt sein Template-Getriebe entgegen:
..\include\xxresult(28): error C2825: '_Fty': must be a class or namespace when followed by '::' [...see reference usw...] [... Folgefehler...] ..\include\xxbind0(12): error C2091: function returns function ..\include\xxbind0(27): error C2091: function returns functionWie mach ichs richtig?
-
Da fehlt _1. Müsste so heißen:
std::bind(&EventHandler::handleEvent, &eh, std::placeholders::_1)
-
danke dir!
habs grade per Lambda geregeltFoo::Foo() #pragma warning(disable: 4355) : eventHandler(new EventHandler()) , serverPtr(new Server([this](ServerEvent const& e){eventHandler->handleEvent(e);})) #pragma warning(default: 4355) /* ... */ {}Ich liebe Lambdas... wirklich

-

-
Wie hoch gehen die Placeholders?
Kanns leider nicht testen, geht das auch:std::placeholders::_20
-
Das ist implementierungsspezifisch. Bei boost gehts bis 9:
http://www.boost.org/doc/libs/1_47_0/boost/bind/placeholders.hppBei meiner Visual Studio 2010 Version bis 10.
-
Nur schade, dass es da einen Dinkumware-Library Bug gibt, bei dem Rvalue-Referenzen nicht mit std::function<> funktionieren.
