Heim > Backend-Entwicklung > C++ > Können Memberfunktionen der C-Klasse als C-Callbacks verwendet werden?

Können Memberfunktionen der C-Klasse als C-Callbacks verwendet werden?

Barbara Streisand
Freigeben: 2024-12-15 07:36:14
Original
552 Leute haben es durchsucht

Can C   Class Member Functions Be Used as C Callbacks?

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:

  1. Ist es möglich, eine Mitgliedsfunktion der C-Klasse als Callback-Funktion zu registrieren?
  2. Gibt es Alternativen Lösungsansätze hierfür Problem?

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;
}
Nach dem Login kopieren

2. Alternative Ansätze:

Alternativ können Sie einen der folgenden Ansätze verwenden:

  • Eine freie Funktion erstellen:Eine freie Funktion mit dem entsprechenden erstellen Signatur und rufen Sie die Mitgliedsfunktion der C-Klasse darin auf. Zum Beispiel:
void e_wrapper(int *k, int *j) {
    A().e(k, j);
}
Nach dem Login kopieren
  • Verwenden Sie einen Funktionszeiger: Definieren Sie einen Funktionszeiger und weisen Sie ihm die Adresse der C-Klassenmitgliedsfunktion zu. Zum Beispiel:
int (*ptr)(int *, int *) = &A::e;
register_with_library(ptr);
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage