c語言的callback function做法只能用函式指標去儲存全域函式,在c++中要用同一招會顯的很不自然,因為全域函式無法封裝到類別當中,而member function則無法直接傳遞函式指標,因為沒連帶物件指標一起傳是沒用的。
於是boost用樣板技巧創造出可以呼叫成員函式的「仿函式」,它將成員函式跟物件的指標封裝在一起,呼叫的人並不需要知道這boost::function的內容物是**來的,裝的是全域函式還是成員函式也不用知道,甚至連這函式實際上到底需要多少個引數也不知道,非常全面的取代了 c語言的 callback function,你只要知道它可以取代函式指標,尤其想實現成員函式的callback function只剩這條路可選。
不過需要注意「仿函式」是用樣板實現的,而樣板魔法只能實作在標頭檔上面,這也不算什麼缺點,跟它帶來的好處相比實在太划算了。
仿函式歷經長時間的演化,已經成為了非常強大的好用工具,在c++11裡面已經成為標準庫成員了。
我的專案裡有個山寨版的
仿函式實作,大多功能都有實現了,內容會比boost的原作好懂許多
,還滿有趣的,尤其bind的實作手法相當精彩,運用了繼承、樣板偏特化、多載,感謝boost高手們的貢獻,如果看不懂實作的話無所謂,畢竟那些樣板技巧很少用到。
類的成員函式
定義類的成員函式 儘管所有成員都必須在類的內部宣告,但是成員函式體可以定義在類的內部也可以定義在類外。定義在類的內部的函式隱式inline函式。引入this 成員函式通過乙個名為this的額外的隱式引數來訪問呼叫它的那個物件。當我們呼叫乙個成員函式時,用請求該函式的物件位址初始化this。例如,如果...
成員函式的定義
如上所述,類中含有兩種成份,即資料成員和成員函式,其中成員函式也稱方法。實際上,成員函式和方法指的是同一種實體,是一種實體的兩種不同叫法,成員函式是程式語言 c 中的術語,而方法是物件導向方法中的術語。在以後的敘述中,本書採用術語成員函式。成員函式的定義通常採用兩種方式。第一種方式是在類宣告中只給出...
類的成員函式
一 建構函式 1 定義 建構函式是乙個特殊的成員函式,名字與類名相同,建立類型別物件時由編譯器自動呼叫,保證每個資料成員都有 乙個合適的初始值,並且在物件的生命週期內只呼叫一次。2 特性 a 函式名與類名相同。b 無返回值。c 物件例項化時編譯器自動呼叫對應的建構函式。d 建構函式可以過載。e 如果...