Heim >Backend-Entwicklung >C++ >Wie rufe ich Zeiger auf Memberfunktionen in C korrekt auf?

Wie rufe ich Zeiger auf Memberfunktionen in C korrekt auf?

Susan Sarandon
Susan SarandonOriginal
2024-12-31 13:20:11592Durchsuche

How to Correctly Call Pointers to Member Functions in C  ?

Zeiger auf Mitgliedsfunktionen in C aufrufen

Zeiger auf Mitgliedsfunktionen bieten eine praktische Möglichkeit zum Speichern und Ausführen bestimmter Mitgliedsfunktionen und bieten gleichzeitig Flexibilität bei der dynamischen Bindung. Der Aufruf dieser Funktionszeiger hat jedoch seine eigene Syntax.

Bei nicht statischen Memberfunktionen erfordert der Aufruf eines Funktionszeigers die Bereitstellung sowohl benannter Parameter als auch eines this-Zeigers, der das Objekt darstellt, auf dem Die Funktion wird aufgerufen. Der folgende korrigierte Code demonstriert die korrekte Syntax:

typedef void (Box::*HitTest)(int x, int y, int w, int h);

for (std::list::<HitTest>::const_iterator i = hitTestList.begin(); i != hitTestList.end(); ++i)
{
    HitTest h = *i;
    (box->*h)(xPos, yPos, width, height);
}

Hier ist box ein Zeiger auf das Box-Objekt, das als dieser-Zeiger fungiert. Durch die Verwendung von box->*h rufen wir im Wesentlichen die Mitgliedsfunktion h auf der spezifischen Box-Instanz auf, auf die box zeigt.

Bezüglich des Hinzufügens von Mitgliedsfunktionen zur Liste wäre der korrigierte Code:

std::list<HitTest> list;

for (std::list<Box*>::const_iterator i = boxList.begin(); i != boxList.end(); ++i)
{
    Box* box = *i;
    list.push_back(&Box::HitTest);
}

Das obige ist der detaillierte Inhalt vonWie rufe ich Zeiger auf Memberfunktionen in C korrekt auf?. 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