1. 程式人生 > >c++ 註冊回撥函式研究

c++ 註冊回撥函式研究

一 何為註冊回撥 

   註冊回撥簡單解釋就是一個高層呼叫底層,底層再過頭來調用高層,這個過程就叫註冊回撥, 連線高層和底層就叫註冊回撥函式。高層程式C1呼叫底層程式C2,而在底層程式C2 又呼叫了高層程式C2的callback函式,那麼這個callback函式對於高層程式C1來說就是回撥函式。 在設計模式中這個方式叫回調模式。

二 註冊回撥函式的例項:

//底層程式 C2

#include<iostream>

using namespace std;

class CCallback
{
public:
	virtual void onCallbackFunc(int value,int type) =0;	
};

class ClassA
{
public: 
	ClassA(CCallback *pCallbackFunc)
	{
		m_pCallBack = pCallbackFunc;	
	}

	void showValue()
	{
		m_pCallBack->onCallbackFunc(15,0);
		m_pCallBack->onCallbackFunc(17,1);
	}
private:
	CCallback *m_pCallBack;

};

//高層程式 C1

#include<iostream>
#include"ClassA.hpp"
using namespace std;

class ClassB : public CCallback
{
public:
	ClassB()
	{
		m_ClassA = new ClassA(this);				
	}

	void onCallbackFunc(int value,int type)
	{
		if(type == 0)
		{
			cout<<"Typ_ZERO =  "<< value<<endl;
		}
		else
		{
			cout<<"Typ_Other =  "<< value<<endl;
		}
	}

	void TestShowData()
	{
		m_ClassA->showValue();
	}
public:
	ClassA * m_ClassA;
};
//主程式 main 
#include "stdafx.h"
#include"ClassB.hpp"


int _tmain(int argc, _TCHAR* argv[])
{

	ClassB *m_classB =new ClassB();
	
	m_classB->TestShowData();

	system("pause:");
	return 0;
}

測試結果:



上面就是一個簡單的註冊回撥的過程。

三 : 註冊回撥有何作用

 註冊回撥 可以讓呼叫者與被呼叫者分開。呼叫者不關心誰是被呼叫者,所有它需知道的,只是存在一個具有某種特定原型、某些限制條件(如返回值為int)的被呼叫函式。