Verwenden einer C-Klasse-Member-Funktion als C-Callback-Funktion
Problem:
Wann Beim Versuch, eine Mitgliedsfunktion der C-Klasse als Rückruffunktion für eine C-Bibliothek zu registrieren, gibt der Compiler einen Fehler aus, der darauf hinweist, dass der Typ der Funktion nicht mit der Funktion übereinstimmt erwartete Signatur.
Fragen:
Antwort:
1. Verwenden einer statischen Mitgliedsfunktion:
Ja, es ist möglich, eine Mitgliedsfunktion der C-Klasse als Rückruffunktion zu registrieren, es muss jedoch eine statische Mitgliedsfunktion sein. Statische Memberfunktionen verfügen nicht über einen impliziten ersten Parameter vom Typ Klasse A*, sodass ihre Signatur mit der erwarteten Rückrufsignatur übereinstimmt. Zum Beispiel:
class A { public: static int e(int *k, int *j) { return 0; } }; int main() { register_with_library(A::e); return 0; }
2. Alternative Ansätze:
Alternativ können Sie einen der folgenden Ansätze verwenden:
void e_wrapper(int *k, int *j) { A().e(k, j); }
int (*ptr)(int *, int *) = &A::e; register_with_library(ptr);
Das obige ist der detaillierte Inhalt vonKönnen Memberfunktionen der C-Klasse als C-Callbacks verwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!