Я знаю, что это было задано так много раз, и из-за этого ему трудно прорываться сквозь треск и найти простой пример того, что работает.
У меня есть это, это просто и работает для 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 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);
};
Как это можно переписать, поэтому EventHandler::addHandler()
будет работать как с MyClass
, так и с YourClass
. Извините, но это так, как работает мой мозг. Мне нужно увидеть простой пример того, что работает, прежде чем я смогу понять, почему и как он работает. Если у вас есть любимый способ сделать эту работу сейчас временем, чтобы показать ее, пожалуйста, разметьте этот код и отправьте его обратно.
[править]
На него был дан ответ, но ответ был удален, прежде чем я могу дать галочку. Ответ в моем случае был шаблонной функцией. Изменен addHandler для этого...
class EventHandler
{
public:
template<typename T>
void addHandler(T* owner)
{
cout << "Handler added..." << endl;
//Let pretend an event just occured
owner->Callback(owner,1);
}
};