您的位置:首页 > 编程语言 > C语言/C++

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: