看一下這個例子吧,我是這樣理解的:
創(chuàng)新互聯(lián)建站自2013年起,是專業(yè)互聯(lián)網技術服務公司,擁有項目成都網站建設、做網站網站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元利州做網站,已為上家服務,為利州各地企業(yè)和個人服務,聯(lián)系電話:18980820575
#include
"iostream.h"
#include
"windows.h"
typedef
void
(CALLBACK
*MyFun)(void);//回調函數(shù)定義
void
CALLBACK
callback()
//
回調函數(shù)
{
cout"****callback****\n";
}
void
Call_CallBack(MyFun
mycb)
{
cout"****Call_CallBack****\n";
mycb();
cout"__________________\n";
}
void
main()
{
Call_CallBack(callback);
}
//
其他人需要修改的話只要修改callback函數(shù)里的內容就行了,一般sdk封裝后都會有回調,這樣他人在調用sdk的時候就可以實現(xiàn)回調函數(shù)里的內容。
如果你需要理論的,網上搜回調函數(shù),內容哈多隨便看
回調函數(shù),顧名思義,也就是等該函數(shù)執(zhí)行完了,會回去調用我們傳進去的函數(shù)。
用到回調函數(shù)的地方有不少,像我見過的:SQLite中的一個函數(shù),sqlite_exec函數(shù)名有沒有記錯我沒什么印象了。待這個函數(shù)執(zhí)行完畢后,會去調用我傳進去的一個函數(shù),一般回調函數(shù)都是有自己的參數(shù)列表格式的,再利用這個格式從回調函數(shù)中獲取到我們需要的一些值。
回調函數(shù)就是一個被作為參數(shù)傳遞的函數(shù)。在C語言中,回調函數(shù)只能使用函數(shù)指針實現(xiàn),在C++、Python、ECMAScript等更現(xiàn)代的編程語言中還可以使用仿函數(shù)或匿名函數(shù)。
回調函數(shù)的使用可以大大提升編程的效率,這使得它在現(xiàn)代編程中被非常多地使用。同時,有一些需求必須要使用回調函數(shù)來實現(xiàn)。
最著名的回調函數(shù)調用有C/C++標準庫stdlib.h/cstdlib中的快速排序函數(shù)qsort和二分查找函數(shù)bsearch中都會要求的一個與strcmp類似的參數(shù),用于設置數(shù)據(jù)的比較方法。
意義
因為可以把調用者與被調用者分開,所以調用者不關心誰是被調用者。它只需知道存在一個具有特定原型和限制條件的被調用函數(shù)。簡而言之,回調函數(shù)就是允許用戶把需要調用的函數(shù)的指針作為參數(shù)傳遞給一個函數(shù),以便該函數(shù)在處理相似事件的時候可以靈活的使用不同的方法。
typedef
struct
{
int
a;
void
(*pshow)(int);
}TMP;
void
func(TMP
*tmp)
{
if(tmp-a
10)//如果a10,則執(zhí)行回調函數(shù)。
{
(tmp-pshow)(tmp-a);
}
}
void
show(int
a)
{
printf("a的值是%d\n",a);
}
void
main()
{
TMP
test;
test.a
=
1;
test.pshow
=
show;
func(test);
}
這只是舉例,一般回調函數(shù)的用法為:
甲方進行結構體的定義(成員中包括回調函數(shù)的指針)
乙方定義結構體變量,并向甲方注冊,
甲方收集N個乙方的注冊形成結構體鏈表,在某個特定時刻遍歷鏈表,進行回調。