被調(diào)用函數(shù)調(diào)用的外部函數(shù)成為回調(diào)函數(shù),windows程序中WndProc函數(shù)就是一個回調(diào)函數(shù)的典型形式。當(dāng)函數(shù)不在同一文件當(dāng)中(比如動態(tài)庫)時,要調(diào)用其他程序中的函數(shù)就只有才用回調(diào)的方式。回調(diào)函數(shù)一般采用函數(shù)指針或者函數(shù)對象的形式實現(xiàn)。

(1)函數(shù)指針:
int A(char *p);                             //回調(diào)函數(shù)
typedef int(*CallBack)(char *p);  //聲明CallBack類型的函數(shù)指針
CallBack myCallBack;                //定義函數(shù)指針變量
myCallBack = A;                        //賦值,得到函數(shù)A的地址
B(A, 5);                                      //調(diào)用B函數(shù)

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

(2)函數(shù)對象:
函數(shù)對象是重載了operator()操作符的類對象,與普通的函數(shù)行為類似。一般情況下用函數(shù)對象優(yōu)于函數(shù)指針,主要因為:
第一,函數(shù)對象具有封裝性,可以在不改動外部接口的情況下修改內(nèi)部操作;
第二,函數(shù)對象可以通過數(shù)據(jù)成員存儲先前調(diào)用結(jié)果,而普通函數(shù)只能通過靜態(tài)變量等方式實現(xiàn);
第三,函數(shù)對象可以實現(xiàn)內(nèi)聯(lián)調(diào)用,加快程序速度。
class CallBack
{
public:
 
int operator()(int num)       //重載()操作符
 {
  
//…………………………..
 }

}

void B(CallBack call, int num)    //定義B函數(shù)
{
//B自己的語句
call(num);
//B自己的語句
}

B(CallBack(), 
5);                 //調(diào)用B函數(shù)