回调函数其实就是对函数指针的应用,要求用户按照相程序员规定的函数指针类型来世实现定义的函数。
1、第一种方式 c语言中实现回调
#include<iostream>
#include<Windows.h>
using namespace std;
//用户不可见
int(*pc)(int a, int b);
/*
由用户实现 回调函数
允许用户自定义实现的函数由用户按照函数指
针参数类型返回值 函数内部细节有自己实现
*/
int Callback(int a, int b)
{
cout<< a + b<<endl;
return 1;
}
//实现用户不可见
void register_callBack(int(*tmp)(int a, int b))
{
pc = tmp;
}
//用户不可见
void _call()
{
//调用函数指针
pc(3,5);
}
int main(void)
{
//用户调用
register_callBack(Callback);
//用户不可见
while (1)
{
_call();
Sleep(1000);
}
return 0;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
第二 c++类之间的回调
//全局的函数指针
typedef void(*CallBackPtr)(int, int);//定义一个回调函数类型指针
//回调类
class CallBack
{
public:
CallBack();
virtual ~CallBack();
//用户实现的函数回调函数
static void RecvClass(int a, int b);
};
CallBack::CallBack()
{
}
CallBack:: ~CallBack()
{
}
//用户实现的函数回调函数
void CallBack::RecvClass(int a, int b)
{
cout << "回调~~~!!!!"<<" "<<a + b << endl;
}
//注册回调类
class MyRegister
{
public:
MyRegister();
virtual ~MyRegister();
//注册回调
void SetRegisterCallback(CallBackPtr ptr);
void Run();
CallBackPtr _p;
};
MyRegister::MyRegister()
{
}
MyRegister::~MyRegister()
{
}
void MyRegister::SetRegisterCallback(CallBackPtr ptr)
{
_p= ptr;
}
void MyRegister::Run()
{
while (true)
{
Sleep(2000);
_p(3, 6);
}
}
//调用
int main(void)
{
MyRegister registers;
CallBack call;
registers.SetRegisterCallback(call.RecvClass);
registers.Run();
return 0;
}