被調用函數調用的外部函數成為回調函數,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函數