Wie implementiere ich einen Callback in C ++?

Ich möchte eine Klasse in c ++ implementieren, die einen Rückruf hat.

Also ich denke, ich brauche eine Methode, die 2 Argumente hat:

das Zielobjekt. (sagen wir mal * myObj)der Zeiger auf eine Mitgliedsfunktion des Zielobjekts. (so kann ich * myObj-> memberFunc ();)

Die Bedingungen sind:

myObj kann aus jeder Klasse stammen.

die Mitgliedsfunktion, die die Rückruffunktion sein soll, ist nicht statisch.

Ich habe darüber gelesen, aber es scheint, als müsste ich die Klasse von myObj vorher kennen. Aber ich bin mir nicht sicher, wie ich es machen soll. Wie kann ich damit umgehen? Ist das in C ++ möglich?

Das ist etwas, was ich im Sinn habe, aber es ist sicherlich falsch.

class MyClassWithCallback{
public
    void *targetObj;
    void (*callback)(int number);
    void setCallback(void *myObj, void(*callbackPtr)(int number)){
        targetObj = myObj;
        callback = callbackPtr;
    };
    void callCallback(int a){
        (myObj)->ptr(a);
    };
};
class Target{
public
    int res;
    void doSomething(int a){//so something here. This is gonna be the callback function};        
};

int main(){
    Target myTarget;
    MyClassWithCallback myCaller;
    myCaller.setCallback((void *)&myTarget, &doSomething);

}

Ich danke für jede Hilfe.

Vielen Dank

UPDATE Die meisten von Ihnen sagten Beobachten und Delegieren, genau das ist es, wonach ich suche. Ich bin eine Art Objective-C / Cocoa-Typ. Meine aktuelle Implementierung verwendet Schnittstellen mit virtuellen Funktionen. Ist nur ich dachte, es wäre "klüger", nur das Objekt und einen Member-Funktionszeiger (wie Boost!) Zu übergeben, anstatt ein Interface zu definieren. Aber anscheinend sind sich alle einig, dass Schnittstellen der einfachste Weg sind, oder? Boost scheint eine gute Idee zu sein (vorausgesetzt es ist installiert)

Antworten auf die Frage(12)

Ihre Antwort auf die Frage