C++類成員函數的指針

作者:winterTTr  (原創,轉載請註明作者)

 

這兩天看到有人問道如何聲明類成員函數指針的問題,以及如何使用。

這裏以一個小例子,簡單演示一下聲明和使用辦法。不做過多的解釋,代碼應該可以說明一切。

 

類成員函數的指針不同於單獨的C中的指針函數,所以必須加上類的作用域限定,才能達到正確編譯和使用。

 

同時,引申一下到STL中關於類成員指針的使用和for_each的配合問題

 

當我們對vector之類的container中的元素進行操作的時候,往往會考慮到使用for_each的通用算法

對於一般的非成員函數的使用時,我們可以直接使用函數本身也是沒有問題的。當然,對於標準的STL使用中,建議使用ptr_fun將函數轉換爲函數對象(仿函數)來說用,舉例如下:

 

那麼,對於成員函數的使用呢,STL考慮到了這點,有對應的adaptor將成員函數轉換爲函數對象,舉例如下:

mem_fun_ref正是用於此處的,可以將成員函數適配爲函數對象。

當然,如果你的container中的元素不是對象,而是對象指針的話(例如:vector<Node*>),那麼使用mem_fun就可以了,這個就是專門處理指針類型的元素對象的成員函數調用的,看,STL想的還是很全的。

 

最後,貼上mem_fun的一個實現,可以看到,正是利用第一個例子中的原理進行封裝,封裝了成員函數指針,以及重載了()操作符實現仿函數對象的,STL還是有很多精彩的代碼可以研究的

 

當然,真正的實現是基於模板的,mem_fun被作爲一個函數調用,返回真正的mem_fun_t函數對象。

同時,真正的mem_fun_t對象的構造函數的參數,正是一個函數指針的聲明(可以參考第一個例子對比看看應該就明白了),只不過沒有使用typedef單獨定義。

 

好了,有關成員函數的指針以及STL中對這個知識點的擴展使用,先說這麼多。歡迎大家補充。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章