C++中建立对象间消息连接的一种系统方法
作者 佚名技术
来源 程序设计
浏览
发布时间 2012-06-30
p; cb);// 重载赋值运算符 //将回调对象的成员函数、静态成员函数(或普通函数) //注册为事件对象的回调函数 void AddCallBack(char *event,CallBackFunction cbf,CallBack *p); void AddCallBack(char *event,CallBackStaticFunction cbsf); //删除注册在指定事件上的回调函数 void RemoveCallBack(char *event,CallBackFunction cbf,CallBack *p); void RemoveCallBack(char *event,CallBackStaticFunction cbsf); void RemoveCallBack(char *event);// 删除某事件的全部记录 //执行注册在某一事件上的所有回调函数 void CallCallBack(char *event, CallData calldata = NULL); }; #endif //回调类的实现:callback.cpp #include"callback.h" //EventRecord类的实现 EventRecord::EventRecord(void) { eventName = NULL; pointerToCBO = NULL; //因为sizeof(CallBackFunction) > sizeof(CallBackStaticFunction) pointerToCBF = NULL; } EventRecord::EventRecord(char *ename, CallBack *pCBO, CallBackFunction pCBF) :pointerToCBO(pCBO), pointerToCBF(pCBF) { eventName = strdup(ename); } EventRecord::EventRecord(char *ename, CallBackStaticFunction pCBSF) :pointerToCBO(NULL), pointerToCBSF(pCBSF) { eventName = strdup(ename); } EventRecord::~EventRecord(void) { if(eventName) delete eventName; } void EventRecord::operator = (const EventRecord& er) { if(er.eventName) eventName = strdup(er.eventName); else eventName = NULL; pointerToCBO = er.pointerToCBO; pointerToCBF = er.pointerToCBF; } int EventRecord::operator == (char *ename) const { if((eventName == NULL)||ename == NULL) return eventName == ename; else return strcmp(eventName,ename) == 0; } int EventRecord::operator == (const EventRecord& er) const { return (er == eventName) /*er和eventname不能交换位置*/ &&(pointerToCBO == er.pointerToCBO) &&(pointerToCBO ? (pointerToCBF == er.pointerToCBF): (pointerToCBSF == er.pointerToCBSF)); } void EventRecord::Flush(void) { if(eventName){ delete eventName; eventName = NULL; } pointerToCBO = NULL; pointerToCBF = NULL; } int EventRecord::IsEmpty(void) const { if(eventName == NULL) return 1; else return 0; } //Callback类的实现 CallBack::CallBack(void) { //按初始尺寸为回调表分配内存空间 callBackList = new EventRecord[CALLBACKLIST_INIT_SIZE]; if(!callBackList){ cerr<<"CallBack: memory allocation error."<<endl; exit(1); } size = CALLBACKLIST_INIT_SIZE; lastpos = 0; curpos = 0; } CallBack::CallBack(const CallBack& cb): curpos(cb.curpos),lastpos(cb.lastpos),size(cb.size) { callBackList = new EventRecord[size]; if(!callBackList){ cerr<<"CallBack: memory allocation error."<<endl; exit(1); } //一一复制各条事件记录 for(int i = 0; i < size; i++) callBackList[i] = cb.callBackList[i]; } void CallBack::operator = (const CallBack& cb) { curpos = cb.curpos; lastpos = cb.lastpos; size = cb.size; delete [] callBackList;//删除旧的回调表 callBackList = new EventRecord[size];//重新分配内存空间 if(!callBackList){ cerr<<"CallBack: memory allocation error."<<endl; exit(1); } //一一复制各条事件记录 for(int i = 0; i < size; i++) callBackList[i] = cb.callBackList[i]; } CallBack::~CallBack(void) { delete [] callBackList; } void CallBack::AddCallBack(char *ev |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: 如何自定义提示窗口(Hint Window)下一篇: 如何自动移去系统托盘失效的图标
关于C++中建立对象间消息连接的一种系统方法的所有评论