我知道这个问题已经被问了很多次,因此很难深入挖掘并找到一个简单的示例来解决问题。
我有一个简单的解决方案,可用于 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
。抱歉,这是我的大脑工作方式,我需要看到一个简单的可行示例,然后才能理解为什么/如何起作用。如果你有一种喜欢的方法可以让这个函数工作,请标记代码并将其回复。
[编辑]
问题已经得到解答,但在我确认选项之前,该答案已被删除。
对我来说答案是使用模板化函数。将addHandler
更改为以下内容...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);
}
};