Je sais que cela a été demandé tant de fois, et à cause de cela, il est difficile de creuser dans la cruauté et de trouver un exemple simple de ce qui fonctionne.
J'ai ça, c'est simple et ça marche pour 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);
};
Comment cela peut-il être réécrit pour EventHandler::addHandler()
fonctionner avec les deux MyClass
et YourClass
. Je suis désolé mais c'est juste la façon dont mon cerveau fonctionne, j'ai besoin de voir un exemple simple de ce qui fonctionne avant de pouvoir comprendre pourquoi / comment cela fonctionne. Si vous avez une façon préférée de faire ce travail, c'est le moment de le montrer, veuillez marquer ce code et le renvoyer.
[Éditer]
Il a été répondu mais la réponse a été supprimée avant que je puisse donner la coche. La réponse dans mon cas était une fonction basée sur un modèle. Ajout de addHandler à ceci ...
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);
}
};