Heim >Backend-Entwicklung >C++ >Wie speichere ich Mitgliedsfunktionszeiger in generischen „std::function'-Objekten?

Wie speichere ich Mitgliedsfunktionszeiger in generischen „std::function'-Objekten?

Linda Hamilton
Linda HamiltonOriginal
2024-12-23 20:39:10262Durchsuche

How to Store Member Function Pointers in Generic `std::function` Objects?

Speichern von Mitgliedsfunktionszeigern in generischen std::function-Objekten

Beim Versuch, Mitgliedsfunktionszeiger einer bestimmten Klasse in einer Karte mit zu speichern std::function-Objekte, Entwickler können auf einen Fehler stoßen: „Term wird nicht als Funktion mit 0 Argumenten ausgewertet.“ Dieser Fehler tritt auf, wenn der Member-Funktionszeiger direkt dem std::function-Objekt zugewiesen wird.

Der Kern des Problems liegt in der Tatsache, dass nicht statische Member-Funktionen einen impliziten „this“-Zeiger als erstes Argument erfordern . Um dies zu beheben, muss das erste Argument explizit gebunden werden.

Lösung:

std::function<void(void)> f = std::bind(&Foo::doSomething, this);

Dieser Ansatz bindet effektiv den „this“-Zeiger als erstes Argument und ermöglicht so das std::function-Objekt, um die Mitgliedsfunktion korrekt zu erfassen.

Handhabung von Funktionen mit Parameter:

Für Memberfunktionen mit Parametern müssen Platzhalter angegeben werden, um die Position der gebundenen Argumente anzugeben.

using namespace std::placeholders;
std::function<void(int, int)> f = std::bind(&Foo::doSomethingArgs,
                                                 this,
                                                 std::placeholders::_1,
                                                 std::placeholders::_2);

C 11 Lambda-Syntax:

Wenn der Compiler C 11-Lambdas unterstützt, kann ein prägnanterer Ansatz sein genutzt:

std::function<void(int, int)> f = [=](int a, int b) {
    this->doSomethingArgs(a, b);
};

Durch die Befolgung dieser Techniken können Entwickler Mitgliedsfunktionszeiger mithilfe generischer std::function-Objekte effektiv speichern und aufrufen.

Das obige ist der detaillierte Inhalt vonWie speichere ich Mitgliedsfunktionszeiger in generischen „std::function'-Objekten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn