一 何为注册回调
注册回调简单解释就是一个高层调用底层,底层再回过头来调用高层,这个过程就叫注册回调, 连接高层和底层就叫注册回调函数。高层程序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;
};
#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)的被调用函数。