有很多人在看到Boost代码的时候,会感觉很头大,为什么呢?因为我们经常看到
type_name function_name (void (*function) (para_list...),para_list...)
这样的东西。有一次看到一个大神写的函数:
void calc (void (*pFun) (int ,int ),int ,int )
我就不太明白这个是什么东西,后来查了一下知道了这就是回调函数。这个东西形状挺吓人的,但是实际上没有什么吓人的。
例如:
#include<iostream>
using namespace std;
void fun1 (int a,int b)
{
cout <<"This is fun1.. a + b = " <<a + b<<end;;
}
void fun2 (int a,int b)
{
cout <<"This is fun2.. a + b"<<a + b <<endl;
}
void fun (void (*f) (int ,int ),int a,int b) // void (*f)(int,int )的作用是声明一个函数,
//注意 (*f)这个括号不可以省略!!
{
//就像声明一个变量那样。调用的时候传来函数名
f (a,b);
}
int main()
{
//好处实现一个函数可以调用不同的函数,实现一种
//动态的调用,提高函数的复用率,减少设计的复杂性
//因为在程序要修改的时候只需要修改传入的函数(被调用者,本例中的fun1()或者fun2())就可以,
//不需要修改调用者(本例中的fun ())本身
fun (fun1,1,2);
fun (fun2,3,4);//因为fun2没有参数,为了保持函数正确,传入0
return 0;
}
这就是我对回调函数的理解。