2014-11-26 6 views
5

Wenn ich binden, um eine Funktion wie diese, indem Platzhalter zum Zeitpunkt der BindungC++ std :: bind rebind Funktion

std::bind(memberFunctionPointer, objectPointer, _1, _2); 

Ist es dann möglich, „rebind“ es später einige/alle der Platzhalter zu ersetzen , aber ohne die Funktion aufzurufen? Ich möchte in der Lage sein, einige Parameter zu übergeben und sie dann zu speichern, um später aufgerufen zu werden. (Verzögerte Rückruf)

Antwort

8

Sie können bind wieder:

auto f = std::bind(memberFunctionPointer, objectPointer, _1, _2); 

auto g = std::bind(f, val1, val2); 

g(); // (objectPointer->*memberFunctionPointer)(val1, val2) 
+0

Beachten Sie, dass f und g in diesem Beispiel Objekte (richtig) haben völlig verschiedene Typen. Ich wollte verschiedene Objekte binden, wie sie an verschiedenen Stellen in meinem Code verfügbar/erstellt wurden, und das bedeutet, dass die Signatur geändert werden muss, die verwendet wird, um das std :: function-Objekt zu übergeben. – tweej