Ich weiß, dass dies so oft gefragt wurde, und aus diesem Grund ist es schwierig, durch die Kruft zu graben und ein einfaches Beispiel dafür zu finden, was funktioniert.
Ich habe das, es ist 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 kann das umgeschrieben werden, so EventHandler::addHandler()
wird mit beiden MyClass
und funktionieren YourClass
. Es tut mir leid, aber es ist nur die Art und Weise, wie mein Gehirn funktioniert. Ich muss ein einfaches Beispiel dafür sehen, was funktioniert, bevor ich verstehen kann, warum / wie es funktioniert. Wenn Sie jetzt eine bevorzugte Methode haben, um diese Funktion zum Vorführen zu bringen, markieren Sie diesen Code und senden Sie ihn zurück.
[bearbeiten]
Es wurde beantwortet, aber die Antwort wurde gelöscht, bevor ich das Häkchen setzen konnte. Die Antwort in meinem Fall war eine Vorlagenfunktion. AddHandler zu diesem geändert ...
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);
}
};