//在通信中可能經常會用到消息ID,處理不同的消息ID找去找對應的處理函數,我寫了一個小例子,處理消息分發。
直接上代碼啦
//頭文件h
#include "stdafx.h" #include "iostream" using namespace std; #define MSG_FUN void (MsgDis::*test)(int) #define MSG_RUN (this->*test) #define FUN_NAME_ &MsgDis:: class MsgDis{ public: void MsgDisp(int para); void MsgDisp_2(int para); void MsgDisp_3(int para); void runMsgFunction(int msgCode){ switch(msgCode){ case 1: {//不加這個括號就會出錯 MSG_FUN = &MsgDis::MsgDisp; MSG_RUN(10); break; }//不加這個括號就會出錯 case 2: { MSG_FUN = &MsgDis::MsgDisp_2; MSG_RUN(20); break; } case 3: { MSG_FUN = &MsgDis::MsgDisp_3; MSG_RUN(30); break; } default: { cout<<"No function for you"<<endl; break; } } } };
//實現文件cpp
#include "stdafx.h" #include "MsgDispatch.h" #include "iostream" using namespace std; void MsgDis::MsgDisp(int para) { cout<<"hi boy ..this is MsgDisp, param is :/t"<<para<<endl; } void MsgDis::MsgDisp_2(int para) { cout<<"hi boy ..this is MsgDisp___2, param is :/t"<<para<<endl; } void MsgDis::MsgDisp_3(int para) { cout<<"hi boy ..this is MsgDisp___3, param is :/t"<<para<<endl; }
//測試文件
// CPlusPlus.cpp : 定義控制檯應用程序的入口點。 // #pragma once #include "stdafx.h" #include "iostream" #include <assert.h> #include "MsgDispatch.h" using namespace std; int _tmain(int argc, _TCHAR* argv[]) { MsgDis *msgDis = new MsgDis; msgDis->runMsgFunction(1);//根據消息ID找到對應的解析方法 msgDis->runMsgFunction(2); msgDis->runMsgFunction(3); msgDis->runMsgFunction(4); getchar(); return 0; }
參考了下這個:M$的文檔
{"type":"doc","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"typ
{"type":"doc","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragr
{"type":"doc","content":[{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null