回调函数,就是一个通过函数指针调用的函数。如果你把函数的指针作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,这就是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的函数(系统)调用的,用于对该事件或条件进行响应。
在讨论回调函数之前,需要先理解一下函数指针
用函数指针的方式来实现一个最简单的hello world程序
void Invoke(const char* s);
int main()
{
void (*fp)(const char* s); //声明一个函数指针(fp)
fp = Invoke; //将Invoke函数的入口地址赋值给fp
fp("Hello World!"); //函数指针fp实现函数调用
return 0;
}
void Invoke(char* s)
{
std::cout << s << std::endl;
}
在实际编程过程中,通常用宏定义的方式来声明函数指针.
举个小例子,本例中结合了函数指针数组
#include <iostream>
#include <string>
//函数指针通常定义一个宏来实现
typedef void (*FP)(const char* s);
void f1(const char* s) { std::cout << s; }
void f2(const char* s) { std::cout << s; }
void f3(const char* s) { std::cout << s; }
void Invoke(const char* s);
int main()
{
//通过函数指针
FP fp = nullptr;
fp = Invoke;
fp("Hello Worle!");
//函数指针数组
FP a[] = { f1,f2,f3 };
a[0]("Hello Worle! Hello Worle!");
std::cin.get();
return 0;
}
void Invoke(const char* s)
{
std::cout << s << std::endl;
}
回调函数,就是一个通过函数指针调用的函数。如果你把函数的指针作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,这就是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的函数(系统)调用的,用于对该事件或条件进行响应。
代码如下
#include <iostream>
#include <string>
typedef void(*FP)(const char* s);
//定义回调函数
void callback(const char* s)
{
std::cout << s << std::endl;
}
//定义回调函数的调用函数
void call(FP f,const char* s)
{
f(s);
}
int main()
{
call(callback, "Hello World!");
std::cin.get();
return 0;
}
通过这些例子,应该可以理解最简单的回调函数的实现
以上代码参照了晚上的例子
在win10,vs2017环境下编译通过