Std::bind mit Memberfunktionen verstehen
std::bind ist ein leistungsstarkes Tool in C zum Erstellen aufrufbarer Objekte. Bei der Arbeit mit Mitgliedsfunktionen werden einige einzigartige Aspekte eingeführt, die verwirrend sein können. Lassen Sie uns untersuchen, wie std::bind Mitgliedsfunktionen interpretiert und nutzt.
Das erste Argument: Warum ein Zeiger?
Das erste Argument für std::bind ist ein Callable Objekt, das eine Funktion, ein Lambda oder sogar eine Mitgliedsfunktion sein kann. Bei der Verwendung einer Member-Funktion ist es wichtig zu verstehen, dass das erste Argument ein Zeiger auf diese Member-Funktion ist. Dies liegt daran, dass alle nicht statischen Mitgliedsfunktionen als Zeiger innerhalb eines Objekts gespeichert werden.
Um einen Zeiger auf eine Mitgliedsfunktion zu erhalten, wird der &-Operator verwendet. Zum Beispiel im folgenden Code:
Foo foo; auto f = std::bind(&Foo::print_sum, &foo, 95, _1);
&Foo::print_sum gibt einen Zeiger auf die print_sum-Memberfunktion innerhalb der Klasse Foo zurück.
Das zweite Argument: Referenzieren des Objekts
Das zweite Argument für std::bind bei Verwendung einer Member-Funktion ist ein Verweis auf das Objekt, zu dem die Member-Funktion gehört. Dies liegt daran, dass Mitgliedsfunktionen Zugriff auf das Objekt benötigen, mit dem sie verknüpft sind.
Im obigen Beispiel muss f auf das foo-Objekt zugreifen können. Durch die Bereitstellung der &foo-Referenz als zweites Argument stellt std::bind sicher, dass alle Aufrufe an f an das foo-Objekt gebunden werden.
Interne Handhabung von std::bind
Intern analysiert std::bind das erste Argument und bestimmt, ob es ein Zeiger auf eine Mitgliedsfunktion ist. Wenn ja, konvertiert es es mithilfe von std::mem_fn() oder einem ähnlichen Mechanismus in ein geeignetes aufrufbares Objekt. Dieses aufrufbare Objekt kapselt sowohl den Zeiger auf die Mitgliedsfunktion als auch den Verweis auf das Objekt.
Ein Beispiel
Zur besseren Veranschaulichung betrachten Sie den folgenden Code:
struct Foo { void print(int n) { std::cout << n << '\n'; } }; Foo foo; std::bind(&Foo::print, &foo, 42)();
In diesem Beispiel erstellt std::bind ein aufrufbares Objekt, das die print-Member-Funktion und einen Verweis auf das foo-Objekt kombiniert. Wenn dieses aufrufbare Objekt aufgerufen wird, ruft es effektiv foo.print(42) auf.
Fazit
Für eine effektive Arbeit ist es von entscheidender Bedeutung, zu verstehen, wie std::bind mit Mitgliedsfunktionen funktioniert mit dieser Technik. Denken Sie daran, dass das erste Argument ein Zeiger auf die Memberfunktion und das zweite Argument eine Referenz auf das Objekt ist. std::bind verarbeitet diese Argumente intern, um aufrufbare Objekte zu erstellen, die eine bequeme Möglichkeit bieten, Mitgliedsfunktionen an bestimmte Objekte zu binden.
Das obige ist der detaillierte Inhalt vonWie geht std::bind mit Mitgliedsfunktionen in C um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!