Heim >Backend-Entwicklung >C++ >Wie funktioniert „std::bind' mit Mitgliedsfunktionen in C?

Wie funktioniert „std::bind' mit Mitgliedsfunktionen in C?

Barbara Streisand
Barbara StreisandOriginal
2024-10-29 21:38:30810Durchsuche

How does `std::bind` work with member functions in C  ?

Std::bind mit Memberfunktionen verstehen

std::bind, ein vielseitiges Tool in C, ermöglicht das Erstellen gebundener Funktionen für den späteren Aufruf. Es kann eine Herausforderung sein, die Verwendung mit Mitgliedsfunktionen zu verstehen, aber diese Diskussion soll die damit verbundenen Feinheiten beleuchten.

Erstes Argument: Ein Zeiger, keine Referenz

Beim Deklarieren einer Bindung für ein Mitglied Funktion ist das erste Argument von std::bind kein Verweis auf die Mitgliedsfunktion, sondern ein Zeiger darauf. Dies liegt daran, dass Funktionen und Datenelemente gleichermaßen in Zeiger zerfallen, wenn sie als Argumente übergeben werden.

Zweites Argument: Objekt oder Zeiger

Das zweite Argument von std::bind beim Umgang mit Elementfunktionen gibt das Objekt an oder Zeiger auf das Objekt, das zum Aufrufen der Memberfunktion verwendet wird. Dies ist notwendig, da Mitgliedsfunktionen einen impliziten this-Zeiger haben, der auf das Objekt zeigt, zu dem sie gehören.

Interne Implementierung

Intern scheint std::bind ein aufrufbares Objekt zu erstellen, das den Zeiger umschließt zur Mitgliedsfunktion. Beim Aufruf dieser gebundenen Funktion wird das angegebene Objekt als This-Zeiger verwendet.

Warum ein Zeiger auf das Objekt?

Im Gegensatz zu Funktionszeigern, die unabhängig von einem bestimmten Objekt sind, Member-Funktionszeiger sind an die Klasse gebunden, zu der sie gehören, können aber mit jedem Objekt dieser Klasse verwendet werden. std::bind unterstützt dies, indem es beim Umgang mit Mitgliedsfunktionen einen Objektzeiger als zweites Argument erfordert.

Beispiel

Betrachten Sie den folgenden Code:

<code class="cpp">struct Foo {
    void print_sum(int n1, int n2) { std::cout << n1 + n2 << '\n'; }
};

Foo foo;

auto f = std::bind(&Foo::print_sum, &foo, 95, _1);</code>

In diesem Beispielsweise ist das erste Argument für std::bind &Foo::print_sum, ein Zeiger auf die Mitgliedsfunktion print_sum innerhalb der Foo-Klasse. Das zweite Argument ist &foo, ein Zeiger auf das foo-Objekt. Beim Aufruf von f wird &foo als this-Zeiger verwendet, sodass print_sum mit dem richtigen Kontext für das foo-Objekt aufgerufen werden kann.

Das obige ist der detaillierte Inhalt vonWie funktioniert „std::bind' mit Mitgliedsfunktionen in C?. 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