Heim >Backend-Entwicklung >C++ >Wie kann C flexible Rückrufmechanismen erreichen, ohne auf Klassenmitgliedsfunktionen angewiesen zu sein?

Wie kann C flexible Rückrufmechanismen erreichen, ohne auf Klassenmitgliedsfunktionen angewiesen zu sein?

Linda Hamilton
Linda HamiltonOriginal
2024-12-30 08:20:10730Durchsuche

How Can C   Achieve Flexible Callback Mechanisms Without Relying on Class Member Functions?

Rückrufmechanismen in C ohne Klassenmitgliedsfunktionen

Rückruffunktionen bieten eine Möglichkeit, eine Funktion zu registrieren, die aufgerufen werden soll, wenn ein bestimmtes Ereignis eintritt. Die Verwendung statischer Methoden und die Übergabe von Klasseninstanzen als Parameter ist zwar ein gängiger Ansatz, schränkt jedoch die Flexibilität der Verwendung von Rückrufen über verschiedene Klassen hinweg ein.

std::function und std::bind in C 11 und darüber hinaus

C 11 führte std::function ein, einen typsicheren Wrapper für Funktionszeiger. Dadurch können Rückrufe unabhängig von der Klasse, auf die sie verweisen, als Objekte gespeichert werden. Darüber hinaus wird std::bind verwendet, um eine Funktion an ein bestimmtes Objekt und seine Argumente zu binden.

Betrachten wir eine Beispiel-Event-Handler-Klasse, EventHandler:

class EventHandler {
public:
    void addHandler(std::function<void(int)> callback) {
        cout << "Handler added..." << endl;
        callback(1); // trigger the event
    }
};

Jetzt MyClass und YourClass Beide können diesen Event-Handler nutzen, indem sie ihre eigenen Callback-Funktionen implementieren und diese bei registrieren std::bind:

class MyClass {
public:
    MyClass() {
        private_x = 5;
        handler->addHandler(std::bind(&MyClass::Callback, this, _1));
    }
private:
    int private_x;

    void Callback(int x) {
        cout << x + private_x << endl;
    }
};

class YourClass {
public:
    YourClass() {
        handler->addHandler(std::bind(&YourClass::Callback, this, _1));
    }
private:
    void Callback(int x) {
        // Do something with x
    }
};

Lambda-Funktionen und EventHandler

Zusätzlich führte C 11 Lambda-Funktionen ein, die eine prägnante und einfache Möglichkeit bieten, anonyme Funktionen zu definieren. Sie können mit Event-Handlern verwendet werden, um hochgradig anpassbare Rückrufe zu erstellen:

handler->addHandler([](int x) {
    cout << "Lambda callback executed with x: " << x << endl;
});

Dies ermöglicht eine größere Flexibilität bei der Definition von Rückrufen und deren Entkopplung von bestimmten Klassenmethoden.

Das obige ist der detaillierte Inhalt vonWie kann C flexible Rückrufmechanismen erreichen, ohne auf Klassenmitgliedsfunktionen angewiesen zu sein?. 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