函数指针用法二:回调(响应代理)

函数指针可以实现很多有趣的功能,比如游戏中的响应代理机制。

先看使用:

代理函数指针指针:ADelegate<DWORD> _DeleFunc;

使用:_DeleFunc(_Arg);

传入:ADelegate<DWORD> Dele = ADelegate<DWORD>::FromMethod<ClassA,&ClassA::CfmFunc>(this);

指针作为参数传入并保存,在合适的时候

建立一个代理类:

template<class ARGTYPE>
class ADelegate {
public: ADelegate();
void operator()(ARGTYPE arg) const; template<class CLASS, void (CLASS::*METHOD)(ARGTYPE)> static ADelegate<ARGTYPE> FromMethod(CLASS* objPtr_);
private:
typedef void (*StubType)(void*, ARGTYPE);
void* objPtr;
StubType subPtr; }
template<class ARGTYPE>
void ADelegate<ARGTYPE>::operator()(ARGTYPE arg) const
{
(*this->subPtr)(this->objPtr, arg);
}
template<class ARGTYPE>
template<class CLASS, void (CLASS::*METHOD)(ARGTYPE)>
static ADelegate<ARGTYPE> ADelegate<ARGTYPE>::FromMethod(CLASS* objPtr_)
{
ADelegate<ARGTYPE> del;
del.objPtr = objPtr_;
//CLASS* obj = static_cast<CLASS*>(CLASS
//del.stubPtr = &MethodStub<CLASS,METHOD>;
return del;
}

 有空完善

posted on 2018-10-24 11:06  YoungBig  阅读(106)  评论(0编辑  收藏  举报

导航