找了一下資料 發現網路上的範例都寫得頗難。
自己寫看看
#include<iostream>
using namespace std;
typedef int(*myFunc)(int a);
int print(int a)
{
a=a+10;
return a ;
}
int test(myFunc my)
{
int a=9;
int b=0;
b=my(a);
return b;
}
int main()
{
int num=0;
num=test(print);
cout<<num<<endl;
system("pause");
return 0;
}
===================================================
簡單的說,如果你使用了某個function,那麼你就是『call』了一個function。如果系統或是函式是要求你給一個function pointer,這個function pointer指到一個實際的函式(多半這個函式是你自己寫的)。然後它會在適當的時間呼叫此function,則此function就是所謂的 callback function。因為這個function是被『callback』了。
=========================================================
文章取自:井民全
Callback = Call back = Call me back when you have done the job = 回電﹝回個電話﹞ = 做好了請叫我一下。 Call back 是英語世界的日常用語。 有一天,內地的A想請港口的B搬貨櫃,A拿起手機呼叫B: A: 呼叫B!請把港口的貨櫃搬上輪船,搬完後請回電告訴我一共搬了幾櫃。 B: 電話幾號? A: 0123456789。 於是B開始搬貨櫃,搬完後打了那個電話號碼,告訴A一共搬了幾櫃。 在程式裡面使用C實作這種call back機制時,A必須傳一個function pointer 給B,讓B可以使用這個function pointer來通知A。這個function pointer 內含某個function的位址,而這個function就被稱為callback function, 並不是因為這個function的長相特別,只是因為它的用途是特別設計給B來 回呼而已。 先了解function pointer的使用,就可以了解如何使用callback了。 有些人對於C語言沒給callback function一個特別的長相有點不滿意,所以 特別定製了一個modifier﹝修飾字﹞叫做CALLBACK,冠在函式名稱前面 以顯名號,就是要告訴看程式碼的人:「這是一個callback function! 這樣 講你應該就知道它是做什麼的了吧。請看看文件或找找程式碼,到底是誰會 傳這個callback function給哪些人......這可是精心設計的。機關重重,請 小心謹慎。」 會需要設計出callback機制的場合,通常比較特殊,例如 iterative processing 或非同步的程式。Tree traversal是iterative processing的一個例子,當然 也只有把tree traversal通用化才會使用到callback。非同步就例如non-blocking socket、non-blocking I/O、或多執行緒程式了。