Heim >Backend-Entwicklung >C++ >Wie verwende ich Member-Funktionszeiger korrekt mit std::function?
So behandeln Sie Elementfunktionszeiger in std::function-Objekten
Bei der Arbeit mit Elementfunktionen innerhalb von std::function-Objekten treten bestimmte Komplikationen auf entstehen kann. Betrachten Sie den folgenden Code:
#include <functional> class Foo { public: void doSomething() {} void bindFunction() { // ERROR std::function<void(void)> f = &Foo::doSomething; } };
Ein Fehler tritt auf, weil nicht statische Memberfunktionen implizit den „this“-Zeiger als Argument übergeben. Allerdings berücksichtigt die std::function-Signatur hier dieses Argument nicht.
Lösung: Binden von Mitgliedsfunktionen an std::function-Objekte
Um dieses Problem zu beheben, das erste Argument („this“) muss explizit gebunden werden:
std::function<void(void)> f = std::bind(&Foo::doSomething, this);
Für Funktionen mit Parametern können Platzhalter sein verwendet:
using namespace std::placeholders; std::function<void(int, int)> f = std::bind(&Foo::doSomethingArgs, this, _1, _2);
In C 11 können auch Lambdas verwendet werden:
std::function<void(int, int)> f = [=](int a, int b) { this->doSomethingArgs(a, b); };
Durch die Integration dieser Techniken können Programmierer erfolgreich mit Mitgliedsfunktionszeigern in std::function-Objekten arbeiten. das implizite „dies“-Argument effektiv verwalten.
Das obige ist der detaillierte Inhalt vonWie verwende ich Member-Funktionszeiger korrekt mit std::function?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!