一、前言
什么是回调函数?各类语言中都存在回调函数,C语言和C++一系列语言中通过回调机制实现模块化、多态化、不同模块的参数传递。
回调机制,c语言和c++的回调机制主要通过函数指针来实现。
typedef T(*PFuncCallback)(T1 param1,T2 param2);
二、c语言多态例子
//声明回调类型函数PSayHelloCallback //@void 为返回来兴 //@name 参数一,表示名字 //@context 上下文,c语言中一般为nullptr typedef void(*PSayHelloCallback)(const char * name,void * context); //定义一个函数指针实体 PSayHelloCallback phelloCallback; void SayHelloEnglish(const char* name,void * context) { printf("Hello,I'm %s.\n",name); } void SayHelloChinese(const char* name, void * context) { printf("你好,我是%s。\n", name); } void RegistCallFunc(PSayHelloCallback phello) { phelloCallback = phello;
调用
RegistCallFunc(SayHelloEnglish); //通过函数指针,把所需的函数传入,通过一个全局指针实现,可以实现c语言的多态,根据需要调用 phelloCallback("lilei",nullptr); RegistCallFunc(SayHelloChinese); phelloCallback("李雷", nullptr);
三、C语言传参的例子
///传值例子 //库提供方的函数指针 typedef void(pOutputCallback)(int ra); //库提供方提供的函数 void PrintINT(pOutputCallback pOut) { pOut(5); } void Output(int ra) { printf("数字是%d\n",ra); } 主函数中 PrintINT(Output); //通过函数指针把外部定义的函数,传入调用方供调用方调用,所以称回调,函数外部定义解析,这样就可以实现接收库提供的数据