回调函数注意几个点:
中间函数:calc函数
回调函数:add_calc函数和minus_calc函数
起始函数:main函数
回调函数通常和应用处于同一抽象层(因为传入什么样的回调函数是在应用级别决定的)。而回调就成了一个高层调用底层,底层再回过头来调用高层的过程。
C++回调函数5个要点:
1、定义函数指针
2、定义回调函数
3、注册(传入)回调函数
4、调用者(中间函数)使用函数指针,调用回调函数
5、main函数调用中间函数
#include <cstdio>
using std::cout;
using std::endl;
typedef int(*callback)(int,int); //定义函数指针
//回调函数1
int add_calc(int a, int b)
{
return a+b;
}
//回调函数2
int minus_calc(int a, int b)
{
return a-b;
}
//calc又叫做中间函数
int calc(int a,int b,callback Func) //calc是中间函数,callback Func是为了传入回调函数
{
return Func(a,b); //4、调用者用函数指针调用回调函数
}
int main()
{
//传入不同的回调函数,会有不同的行为
cout << calc(4,2,add_calc) << endl; //中间函数
//cout << calc(4,2,minus_calc) <<endl;
return 0;
}
回调有两种:阻塞式回调和延迟式回调
阻塞式回调
阻塞式回调里,回调函数的调用一定发生在起始函数返回之前。
延迟式回调
而延迟式回调里,回调函数的调用有可能是在起始函数返回之后。
延迟式回调,最典型的例子是createThread(threadFuntion),这里threadFuntion是callback函数,createThread是中间函数。如果起始函数想等待线程完毕,就是用join函数。
为什么需要回调函数?
回调机制提供了非常大的灵活性。程序可以在运行时,通过登记不同的回调函数,来决定、改变中间函数的行为。这就比简单的函数调用要灵活太多了。