C++中函數(shù)指針和回調(diào)函數(shù)講解
C++很多類庫都喜歡用回調(diào)函數(shù),MFC中的定時器,消息機制,hook機制等待,包括現(xiàn)在在研究的cocos2d-x中也有很多的回調(diào)函數(shù)。
1.回調(diào)函數(shù)
什么是回調(diào)函數(shù)呢?回調(diào)函數(shù)其實就是一個通過函數(shù)指針調(diào)用的函數(shù)!假如你把A函數(shù)的指針當作參數(shù)傳給B函數(shù),然后在B函數(shù)中通過A函數(shù)傳進來的這個指針調(diào)用A函數(shù),那么這就是回調(diào)機制。B函數(shù)就是回調(diào)函數(shù),而通常情況下,A函數(shù)是系統(tǒng)在符合你設(shè)定條件的情況下會自動執(zhí)行,比如Windows下的消息觸發(fā)等等。那么調(diào)用者和被調(diào)用者的關(guān)系就被拉開了,就像是中斷處理函數(shù)那樣。
2.函數(shù)指針
函數(shù)指針是一個指針,只是這個指針它不像普通的指針指向是是一個變量,此時它指向的是一個函數(shù),也就是它存儲的是一個函數(shù)的地址,如果我們愿意的話,可以改變這個它的值,讓他由指向funA轉(zhuǎn)變?yōu)橹赶騠unB,那么這個函數(shù)指針的作用就改變了。
3.函數(shù)指針的使用
3.1函數(shù)指針聲明
[cpp]?view plaincopy typedef?返回類型(*函數(shù)指針類型名)(函參列表);??
3.2示例
[cpp]?view plaincopy typedef?void(*Fun)(int,int);?//定義函數(shù)指針類型?? void?min(int?a,int?b);?? void?max(int?a,int?b);?? ?? void?min(int?a,int?b)?? {?? ????int?minvalue=a<b?a:b;?? ????std::cout<<"min?value?is?"<<minvalue<