Heim > Backend-Entwicklung > C++ > Wie geht std::bind mit Mitgliedsfunktionen in C um?

Wie geht std::bind mit Mitgliedsfunktionen in C um?

Susan Sarandon
Freigeben: 2024-10-29 21:57:02
Original
445 Leute haben es durchsucht

How does std::bind handle member functions in C  ?

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

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

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!

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