64,650
社区成员
发帖
与我相关
我的任务
分享
#include "stdafx.h"
#include "Test.h"
#include "conio.h"
#include "iostream"
using namespace std;
struct Storage
{
void *pObj;
long memFun;
};
template<typename C>
void Invoker(Storage&store)
{
typedef void(C::*MEM_FUN)();
MEM_FUN fun = *(MEM_FUN*)(void*)&store.memFun;
C*p = (C*)store.pObj;
(p->*fun)();
}
struct Delegate
{
typedef void(*INVOKER)(Storage&);
INVOKER Invoker;
Storage store;
void operator()(){ Invoker(store); }
};
class Sdk
{
public:
Delegate doEvent;
void Do()
{
cout<<"dothing"<<endl;
doEvent();
}
};
class Client
{
public:
Sdk sdk;
Client()
{
typedef void(Client::*FUN)();
FUN fun = &Client::OnDo;
sdk.doEvent.Invoker = Invoker<Client>;
sdk.doEvent.store.pObj = (void*)this;
sdk.doEvent.store.memFun = *(long*)&fun;
}
void Do()
{
cout<<"call sdk..."<<endl;
sdk.Do();
}
void OnDo()
{
cout<<"event call back"<<endl;
}
};
int main()
{
Client client;
client.Do();
getch();
return 0;
}