C++ 接口 回调
2015-07-28 12:40
501 查看
<pre name="code" class="plain">C++ 接口 回调
1、用抽象类设计接口,包含几个待实现的函数用于事件响应。
如下文class InstrestingEvent,其中包含两个纯虚函数,作为响应。
2、定义一个接口指针,作为被调用类的成员
如在class EventNotifier类中加入InterestingEvent *m_ie。
3、实例化一个接口,作为接口类的子类,其中需要写出具体的响应事件。
如T1,并且将T1的this指针传给Decoder中的m_ie,即定义好了一个可用的接口。
4、等待事件发生,调用接口中的响应事件
如m_Happened2==1,m_ie->interestingevent2();
下面是一个简单的回调栗子:
#include <iostream> using namespace std; class InterestingEvent{ public: virtual int interestingevent1()=0; virtual int interestingevent2()=0; }; class EventNotifier{ private: InterestingEvent *m_ie; bool m_Happened1,m_Happened2; public: EventNotifier(InterestingEvent *event){//保存对象事件以备后用 m_ie=event; m_Happened1=false; m_Happened2=false; } ~EventNotifier(){}; int doWork(){ if (m_Happened1){ m_ie->interestingevent1(); } else if (m_Happened2){ m_ie->interestingevent2(); } return 0; } int setHappened(){ m_Happened2=true; return 0; } }; class T1:public InterestingEvent{ private: EventNotifier *m_Notifier; public: T1(){ m_Notifier=new EventNotifier(this);//指向接口,即所谓的回调! } ~T1(){}; virtual int interestingevent1(){ cout<<"interestingevent1()"<<endl; return 0; } virtual int interestingevent2(){ cout<<"interestingevent2()"<<endl; return 0; } // int Do() // { // m_Notifier->setHappened(); // m_Notifier->doWork(); // return 0; // } }; int main() { EventNotifier *E1=new EventNotifier(new T1); E1->setHappened(); E1->doWork(); // T1 t1; // t1.Do(); return 0; }