Heim >Backend-Entwicklung >C++ >Wie kann ich eine Mitgliedsfunktion der C-Klasse als Rückruf an eine API übergeben?

Wie kann ich eine Mitgliedsfunktion der C-Klasse als Rückruf an eine API übergeben?

Barbara Streisand
Barbara StreisandOriginal
2024-12-24 10:15:37155Durchsuche

How Can I Pass a C   Class Member Function as a Callback to an API?

Klassenmitgliedsfunktionen als Rückrufe übergeben

Beim Versuch, eine Klassenmitgliedsfunktion als Rückruf an eine API zu übergeben, können Kompilierungsfehler auftreten aufgrund der fehlenden Argumentliste. Um dieses Problem zu beheben, wird empfohlen, Funktionszeiger oder Lambda-Ausdrücke zu verwenden, die die Klasseninstanz erfassen.

Funktionszeiger

Die Fehlermeldung schlägt die Verwendung von „&CLoggersInfra::“ vor. RedundancyManagerCallBack‘, um einen Zeiger auf das Mitglied zu erstellen. Dies liegt daran, dass Klassenmitgliedsfunktionen normalerweise zwei Parameter benötigen: Der erste Parameter ist ein Zeiger auf die Klasseninstanz und der zweite Parameter ist das/die Argument(e) der Funktion.

void (CLoggersInfra::*ptr)(int); // Function pointer type
ptr = &CLoggersInfra::RedundancyManagerCallBack;

Der Funktionszeiger-Ansatz erfordert jedoch Sie müssen den ersten Parameter explizit angeben, was möglicherweise nicht in allen Szenarien praktikabel ist.

Lambda-Ausdrücke (C 11 und Später)

Lambda-Ausdrücke bieten eine präzisere und flexiblere Möglichkeit, die Klasseninstanz zu erfassen und eine Rückruffunktion zu erstellen:

auto lambda = [this](int arg) { this->RedundancyManagerCallBack(arg); };

Dieser Lambda-Ausdruck erfasst den Zeiger „this“ und definiert eine anonyme Funktion, die ein ganzzahliges Argument „arg“ akzeptiert. Anschließend können Sie das Lambda als Rückruf übergeben:

m_cRedundencyManager->Init(lambda);

Fazit

Durch die Verwendung von Funktionszeigern oder Lambda-Ausdrücken können Sie Klassenmitgliedsfunktionen effizient als Rückrufe übergeben Einhaltung der API-Anforderungen und Vermeidung von Kompilierungsfehlern. Lambda-Ausdrücke sind in C 11 und späteren Versionen besonders praktisch, da sie die Erfassung von Klasseninstanzen vereinfachen.

Das obige ist der detaillierte Inhalt vonWie kann ich eine Mitgliedsfunktion der C-Klasse als Rückruf an eine API übergeben?. 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