實現模板類型的回調callback類

代碼下載傳送門

基類

class CCallBackBase
{
	public:
		virtual void callBack(void){}
};

模板類


template<typename T>
class CTemplateCallBack: public CCallBackBase
{
    public:
        CTemplateCallBack(T* ptr_T, void(T::*ptr_func)()):_ptr_T(ptr_T), _ptr_func(ptr_func){}
        virtual void callBack(void){
            if(_ptr_T && _ptr_func)
				(_ptr_T->*_ptr_func)();
        }
        int enable(){
			//push "this" into a CCallBackBase* array or vector
		}
        int disable(){
			//pop "this" into a CCallBackBase* array or vector
		}
    private:
        T* _ptr_T;
		void (T::*_ptr_func)();
};

使用

  1. 聲明一個用來存放基類指針的數組或者vector等容器。(這裏爲什麼要用基類的指針,因爲要利用C++的多態)
  2. 在派生的模板類中的成員函數enable()中將實例本身的指針即this存放到1中聲明的容器中。
  3. 創建一個派生類對象,假設有一個實例,其類型爲A,成員函數爲a,那麼創建派生類對象如下:CTemplateCallBack<T> obj
  4. 綁定回調函數,obj(this, &A::a)
  5. 完成1,2,3,4後,我們獲得一個存放着基類指針指向派生類的指針。那麼我們可以用基類指針指向派生類的成員函數。

代碼下載傳送門

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章