被调用函数调用的外部函数成为回调函数,windows程序中WndProc函数就是一个回调函数的典型形式。当函数不在同一文件当中(比如动态库)时,要调用其他程序中的函数就只有才用回调的方式。回调函数一般采用函数指针或者函数对象的形式实现。

(1)函数指针:
int A(char *p);                             //回调函数
typedef int(*CallBack)(char *p);  //声明CallBack类型的函数指针
CallBack myCallBack;                //定义函数指针变量
myCallBack = A;                        //赋值,得到函数A的地址
B(A, 5);                                      //调用B函数

void B(CallBack lpCall, int num)
{
 
//B自己的语句
 lpCall(“Hello”);
 
//B自己的语句
}

(2)函数对象:
函数对象是重载了operator()操作符的类对象,与普通的函数行为类似。一般情况下用函数对象优于函数指针,主要因为:
第一,函数对象具有封装性,可以在不改动外部接口的情况下修改内部操作;
第二,函数对象可以通过数据成员存储先前调用结果,而普通函数只能通过静态变量等方式实现;
第三,函数对象可以实现内联调用,加快程序速度。
class CallBack
{
public:
 
int operator()(int num)       //重载()操作符
 {
  
//…………………………..
 }

}

void B(CallBack call, int num)    //定义B函数
{
//B自己的语句
call(num);
//B自己的语句
}

B(CallBack(), 
5);                 //调用B函数