64,639
社区成员
发帖
与我相关
我的任务
分享
class B;
class A
{
public:
void CallCallBack(void(B::*lpfn)(LPCTSTR),LPCTSTR lpstr,B*ptr);
};
class B
{
public :
inline void fncallback(LPCTSTR lpstr)
{
::MessageBox(NULL,lpstr,NULL,MB_OK);
}
inline void Start()
{
union
{
void(*lpfn1)(LPCTSTR);
void(B::*lpfn2)(LPCTSTR);
} _proc;
_proc.lpfn2 = &B::fncallback ;
A a;
a.CallCallBack(_proc.lpfn2,_T("callback string!"),this);
}
};
void A::CallCallBack(void(B::*lpfn)(LPCTSTR),LPCTSTR lpstr,B*ptr)
{
(ptr->*lpfn)(lpstr);
}
int main()
{
B b;
b.Start();
return 0;
}