Ich weiß, dass dies so oft gefragt wurde, und deshalb ist es schwierig, durch die Gruft zu graben und ein einfaches Beispiel dafür zu finden, was funktioniert.C++ - Klasse Mitglied Rückruf einfache Beispiele
ich das habe, dann ist es einfach und es funktioniert für MyClass
...
#include <iostream>
using std::cout;
using std::endl;
class MyClass
{
public:
MyClass();
static void Callback(MyClass* instance, int x);
private:
int private_x;
};
class EventHandler
{
public:
void addHandler(MyClass* owner)
{
cout << "Handler added..." << endl;
//Let's pretend an event just occured
owner->Callback(owner,1);
}
};
EventHandler* handler;
MyClass::MyClass()
{
private_x = 5;
handler->addHandler(this);
}
void MyClass::Callback(MyClass* instance, int x)
{
cout << x + instance->private_x << endl;
}
int main(int argc, char** argv)
{
handler = new EventHandler();
MyClass* myClass = new MyClass();
}
class YourClass
{
public:
YourClass();
static void Callback(YourClass* instance, int x);
};
Wie das so umgeschrieben werden kann EventHandler::addHandler()
werden beide arbeiten mit MyClass
und YourClass
. Es tut mir leid, aber es ist nur die Art, wie mein Gehirn funktioniert, ich muss ein einfaches Beispiel dafür sehen, was funktioniert, bevor ich verstehen kann, warum/wie es funktioniert. Wenn Sie einen bevorzugten Weg haben, diese Arbeit jetzt zu machen, ist es an der Zeit, sie zu zeigen, bitte markieren Sie diesen Code und senden Sie ihn zurück.
[Bearbeiten]
Es beantwortet wurde, aber die Antwort gelöscht wurde, bevor ich das Häkchen geben könnte. Die Antwort in meinem Fall war eine Vorlagenfunktion. Changed addHandler dazu ...
class EventHandler
{
public:
template<typename T>
void addHandler(T* owner)
{
cout << "Handler added..." << endl;
//Let's pretend an event just occured
owner->Callback(owner,1);
}
};
Wer hat das Template-Beispiel veröffentlicht? Du hast das Häkchen, aber du hast deine Antwort gelöscht, während ich getestet habe. Es hat genau das gemacht, was ich brauchte. Eine einfache Funktionsschablone ist im Eintopf von allen anderen Informationen verloren gegangen, die ich las. Ihre Antwort wurde zur Frage hinzugefügt. – BentFX
Ich denke, es war JaredC. Sie müssen ihn vielleicht jagen = P – WhozCraig