Heim >Backend-Entwicklung >C++ >Wie kann ich C-Klassen-Memberfunktionen als C-Callbacks registrieren?
C-Klassenmitgliedsfunktionen als C-Rückruffunktionen registrieren
Bei der Arbeit mit C-Bibliotheken, die Rückruffunktionen erfordern, kann es sein, dass wir uns registrieren müssen Memberfunktionen der C-Klasse. Der Versuch, eine nicht-statische Mitgliedsfunktion als Rückruf zu registrieren, führt jedoch zu einem Compilerfehler.
Können wir Mitgliedsfunktionen der C-Klasse registrieren?
Ja, das ist es Es ist möglich, Mitgliedsfunktionen der C-Klasse als Rückruffunktionen mithilfe statischer Mitgliedsfunktionen zu registrieren.
Statische Mitgliedsfunktion Ansatz
Statische Memberfunktionen haben keinen impliziten ersten Parameter des Klassentyps. Somit stimmt ihre Signatur mit dem erwarteten Typ der Rückruffunktion überein, sodass sie erfolgreich registriert werden können.
Beispiel
class A { public: static int e(int *k, int *j) { return 0; } }; A::A() { register_with_library(A::e); }
Alternative Ansätze
int e(int *k, int *j) { A a; return a.e(k, j); } A::A() { register_with_library(e); }
struct EF { A* a; int operator()(int *k, int *j) { return a->e(k, j); } }; A::A() { EF ef = {this}; register_with_library(ef); }
Die Wahl des Ansatzes hängt von den spezifischen Anforderungen der C-Bibliothek und dem gewünschten Grad an Kapselung und Wiederverwendbarkeit ab.
Das obige ist der detaillierte Inhalt vonWie kann ich C-Klassen-Memberfunktionen als C-Callbacks registrieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!