【发布时间】:2012-12-20 19:09:12
【问题描述】:
我知道这个问题已经被问过很多次了,因此很难深入挖掘并找到一个简单的例子来说明什么是有效的。
我知道了,它很简单,适用于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);
}
};
【问题讨论】:
-
谁发布了模板化函数示例?你得到了复选标记,但在我测试时你删除了你的答案。它正是我需要的。一个简单的函数模板在我正在阅读的所有其他信息中迷失了。您的答案添加为问题的编辑。
-
我认为是 JaredC。你可能需要追捕他=P
标签: c++ function callback member