我知道这个问题已经被问过很多次了,正因为如此,我们很难挖掘出一个简单的例子来说明什么是有效的。
我有这个,它很简单,它为 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);
};
如何重写,使 EventHandler::addHandler()
将与 MyClass
和 YourClass
工作。我很抱歉,但这只是我的大脑工作的方式,我需要看到一个简单的例子,什么工作之前,我可以理解为什么/如何工作。如果你有一个最喜欢的方法来使这个工作现在是时候展示它,请标记该代码,并张贴回来。
[编辑]
有人回答了,但是我还没来得及打勾,答案就被删除了。 在我的例子中,答案是一个模板函数。
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);
}
};