c++ 註冊回撥函式研究
阿新 • • 發佈:2019-01-23
一 何為註冊回撥
註冊回撥簡單解釋就是一個高層呼叫底層,底層再回過頭來調用高層,這個過程就叫註冊回撥,
連線高層和底層就叫註冊回撥函式。高層程式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
//主程式 main#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; };
#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)的被呼叫函式。