#include <iostream>
using namespace std;
class Callee
{
public:
void PrintInfo(int i)
{ cout << "printf info " << i << endl; }
static void OnCallback(void *arg, int i)
{
Callee *callee = static_cast<Callee*>(arg);
callee->PrintInfo(i);
}
};
typedef void(*CallbackFunctor)(void*, int);
class Caller
{
public:
void SetCallback(CallbackFunctor func, void *arg)
{
m_callBack = func;
m_callee = arg;
}
void DoCallback(int i)
{
m_callBack(m_callee, i);
}
private:
CallbackFunctor m_callBack;
void *m_callee;
};
int main()
{
Caller caller;
Callee callee;
caller.SetCallback(Callee::OnCallback, &callee);
caller.DoCallback(10);
Caller caller2;
Callee callee2;
caller2.SetCallback(Callee::OnCallback, &callee2);
caller2.DoCallback(20);
return 0;
}