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

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

Linda Hamilton
Freigeben: 2024-12-23 20:39:10
Original
254 Leute haben es durchsucht

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);
Nach dem Login kopieren

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);
Nach dem Login kopieren

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);
};
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage