使用Callback封装

    简单来说,callback是一种函数指针,该函数是指针被当作参数传给另外一个函数B,其后函数B则能通过该指针来调用函数指针所指向的函数。callback的使用范围很广,尤其是用于事件机制。
    使用callback函数进行封装,具有很高的灵活性,如事件的发布与处理机制等,但是使用callback有一个最重要的地方就是函数指针的原型问题,定义一个callback原型,那么相应的客户端的函数签名是要符合这个callback原型的。
     以下是一个简单的callback封装:

class ICallback{
    public:
        virtual bool Execute(void *Param) const=0;
};

template
class TCallback: public ICallback{
    public:
        TCallback(){
            // Initialize the pointer
            pFunction=0;
        }

        // You can change the callback to take more parameters or to return something.
        typedef bool (cInstance::*tFunction)(void *Param);
       
        // Execute the callback
        virtual bool Execute(void *Param) const{
            if(pFunction) return (cInst->*pFunction(Param));
            else printf("ERROR: The callback function has not been defined!!!");

            return false;
        }
       
        // Set or change the Callback
        void SetCallback(cInstance *cInstancePointer,
                    tFunction pFunctinPointer){
            cInst=cInstancePointer;
            pFunction=pFunctinPointer;
        }
    private:
        cInstance *cInst;
        tFunction pFunction;
};

你可能感兴趣的:(Infrastructure)