C++中函數(shù)指針和回調(diào)函數(shù)講解
掃描二維碼
隨時(shí)隨地手機(jī)看文章
C++很多類庫都喜歡用回調(diào)函數(shù),MFC中的定時(shí)器,消息機(jī)制,hook機(jī)制等待,包括現(xiàn)在在研究的cocos2d-x中也有很多的回調(diào)函數(shù)。
1.回調(diào)函數(shù)
什么是回調(diào)函數(shù)呢?回調(diào)函數(shù)其實(shí)就是一個(gè)通過函數(shù)指針調(diào)用的函數(shù)!假如你把A函數(shù)的指針當(dāng)作參數(shù)傳給B函數(shù),然后在B函數(shù)中通過A函數(shù)傳進(jìn)來的這個(gè)指針調(diào)用A函數(shù),那么這就是回調(diào)機(jī)制。B函數(shù)就是回調(diào)函數(shù),而通常情況下,A函數(shù)是系統(tǒng)在符合你設(shè)定條件的情況下會自動執(zhí)行,比如Windows下的消息觸發(fā)等等。那么調(diào)用者和被調(diào)用者的關(guān)系就被拉開了,就像是中斷處理函數(shù)那樣。
2.函數(shù)指針
函數(shù)指針是一個(gè)指針,只是這個(gè)指針?biāo)幌衿胀ǖ闹羔樦赶蚴鞘且粋€(gè)變量,此時(shí)它指向的是一個(gè)函數(shù),也就是它存儲的是一個(gè)函數(shù)的地址,如果我們愿意的話,可以改變這個(gè)它的值,讓他由指向funA轉(zhuǎn)變?yōu)橹赶騠unB,那么這個(gè)函數(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<