【IT168技术文档】
大家都知道对象是数据和方法的封装体。在C++中,它们分别表现为数据成员和成员&&函数。程序设计者通过执行对象的各种方法,来改变对象的状态(即改变对象的&&属性数据)。从而使该对象发生某些“&&事件”。当一对象发生某&&事件时,它通常需向其它相关对象发送“消息”,请求它们作出一些处理。 这时,发生&&事件并向其它对象请求处理的对象被称为“&&事件对象”,而处理&&事件的对象被称为“回调对象”。回调对象对&&事件的处理称为“回调&&函数”。
在C++中,这一过程相当于:当&&事件对象发生&&事件时,调用回调对象的某些成员&&函数。通常的作法是回调对象向&&事件对象传递对象&&keyword=%D6%B8%D5%EB&Submit=+%CB%D1%CB%F7+">指针。但这种方法不通用。为了减少程序设计的工作量,本文提出一种建立对象间消息连接的系统方法。它的思路是:将“&&事件发生→请求处理→执行处理”这一过程抽象成一个“回调”(CallBack)类。通过继承,用户可以轻松获取建立对象间消息连接的机制。
一、回调类的数据结构及其成员&&函数
本文提出的CallBack类支持三种回调&&函数。它们是:回调对象中的成员&&函数,属于回调类的静态成员&&函数和普通的C&&函数。CallBackle类中包含一回调&&函数表callBackList。它用于记录&&事件名称,指向回调&&函数及回调对象的&&keyword=%D6%B8%D5%EB&Submit=+%CB%D1%CB%F7+">指针。该表的每一个节点为一个&&事件记录EventRecord。每个&&事件记录包含三个域:&&事件名&&keyword=%D6%B8%D5%EB&Submit=+%CB%D1%CB%F7+">指针eventName,指向回调对象的&&keyword=%D6%B8%D5%EB&Submit=+%CB%D1%CB%F7+">指针pointerToCBO,指向回调&&函数的&&keyword=%D6%B8%D5%EB&Submit=+%CB%D1%CB%F7+">指针pointerToCBF或pointerToCBSF(其中,pointerToCBF指向回调对象的成员&&函数,pointerToCBSF指向回调类的静态成员&&函数或普通&&函数。它们同处于一共用体内)。CallBack类所提供的回调机制是这样的:在&&事件对象上注册回调对象中的回调&&函数;当&&事件发生时,&&事件对象在其回调表中检索并执行回调&&函数。从而使二者的消息连接得以建立。(关于该类的具体实现,请参阅文后所附的程序清单) 回调对象
&&事件对象
&&事件名 回调对象&&keyword=%D6%B8%D5%EB&Submit=+%CB%D1%CB%F7+">指针 回调&&函数&&keyword=%D6%B8%D5%EB&Submit=+%CB%D1%CB%F7+">指针
AddCallBack: 注册&&事件名和指向回调&&函数,回调对象的&&keyword=%D6%B8%D5%EB&Submit=+%CB%D1%CB%F7+">指针“event” pointerCBO pointerToCBF或 pointerTOCBSF - - - - - -
CallCallBack: 在回调表中,检索注册在指定&&事件上回调&&函数并调用它们
&&事件发生时,调用CallCallBack&&函数
对&&事件event进行处理的成员&&函数
从CallBack类继承的回调表callBackList, 成员&&函数AddCallBack和CallCallBack。
当回调&&函数为静态成员&&函数或普通C&&函数时, pointerToCBO为NULL。
&&事件名是回调表callBackLis中的检索关键字。
回调对象中其它成员&&函数
CallBack类的成员&&函数AddCallBack用来将回调&&函数注册到&&事件对象的回调表中。它有两个重载版本:
void CallBack::AddCallBack(char *event,CallBackFunction cbf,CallBack *p); void CallBack::AddCallBack(char *event,CallBackStaticFunction cbsf);