当我们要进行消息处理的时候,通常需要写出一系列的消息函数,然后再将这些函数指针赋值给一个函数指针数组。当要使用的时候,根据消息编号确定在数组中的位置。 在C++中,成员函数指针写着很不顺手。。于是做了一个基类。。这个基类有个限制,就是只能处理两个参数的消息处理函数。
第一个是消息ID,第二个就是消息内容。不过多数情况下已经够用。。。
#include "stdafx.h" #include <iostream> #include <stdio.h> #include <assert.h> enum EDataType { eData0, eData1, eData2, eData3, eData4, eData5, eData6, eData7, eData8, eDataCnt }; template <class __T_,int _MAX_NUM = 100> class CMsgBase { typedef void (__T_::*ProcFunc)(void* pData); public: CMsgBase() { for(int i = 0; i< _MAX_NUM;++i) { mDataOpList[i] = NULL; } } void ProcMsg(int dataType,void* pData) { assert(dataType<_MAX_NUM); if(mDataOpList[dataType]) (((__T_*)this)->*mDataOpList[dataType])(pData); } void Register(int dataType,ProcFunc fn) { assert(dataType<_MAX_NUM); mDataOpList[dataType] = fn; } protected: ProcFunc mDataOpList[_MAX_NUM]; }; class CMsgHandler:public CMsgBase<CMsgHandler,eDataCnt> { public: CMsgHandler() { Register(0,&CMsgHandler::Func1); } virtual void Func1(void* pdata) { int p = *(int*)pdata; std::cout<<"Handler 0"<<p<<endl; } }; int main() { CMsgHandler *b=new CMsgHandler; b->ProcMsg(0,b); delete b; getchar(); }
虽然是YY的,但至少执行正确。。。改天继续YY。
转载于:https://www.cnblogs.com/qilinzi/archive/2010/07/07/1940482.html
