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!