나는 이것이 여러 번 요청되었다는 것을 알고 있으며, 그 때문에 균열을 파헤 치고 작동하는 간단한 예를 찾기가 어렵습니다.
나는 이것을 가지고 있으며, 간단하고 작동합니다 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);
}
};