Heim >Backend-Entwicklung >C++ >Wie kann ich C-Klassen-Memberfunktionen als C-Callbacks registrieren?

Wie kann ich C-Klassen-Memberfunktionen als C-Callbacks registrieren?

Barbara Streisand
Barbara StreisandOriginal
2024-12-11 19:36:14704Durchsuche

How Can I Register C   Class Member Functions as C Callbacks?

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

  • Funktionszeiger: Erstellen Sie einen Funktionszeiger, der auf zeigt C-Mitgliedsfunktion und registrieren Sie sie bei der Bibliothek.
int e(int *k, int *j) {
    A a;
    return a.e(k, j);
}

A::A() {
    register_with_library(e);
}
  • Funktoren: Erstellen Sie eine Funktorklasse, die den Operator() überschreibt, um die C-Mitgliedsfunktion aufzurufen. Registrieren Sie eine Instanz des Funktors als Rückruf.
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!

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