Speichern von Mitgliedsfunktionszeigern in std::function Map für eine einzelne Klasse
Beim Versuch, Funktionszeiger auf Mitgliedsfunktionen einer bestimmten Klasse zu speichern Wenn Sie eine Klasse in einer std::function-Map verwenden, ist es wichtig, die Anforderungen zu verstehen, die erforderlich sind, damit eine nicht statische Memberfunktion mit einer aufgerufen werden kann Objekt.
Im bereitgestellten Code ist der Fehler auf die falsche Funktionssignatur von std::function
Der korrigierte Codeausschnitt wäre:
#include <functional> class Foo { public: void doSomething() {} void bindFunction() { // Correct std::function<void(Foo*)> f = &Foo::doSomething; } };
Um eine Funktion weiter mit Parametern zu verknüpfen, können C-Platzhalter oder C 11-Lambdas verwendet werden. Hier sind Beispiele für diese Ansätze:
Verwendung von Platzhaltern:
using namespace std::placeholders; std::function<void(Foo*, int, int)> f = std::bind(&Foo::doSomethingArgs, this, _1, _2);
Verwendung von Lambdas (C 11):
std::function<void(Foo*, int, int)> f = [=](Foo* foo, int a, int b) { foo->doSomethingArgs(a, b); };
Das obige ist der detaillierte Inhalt vonWie speichere ich Mitgliedsfunktionszeiger korrekt in einer „std::function'-Map?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!