1. 程式人生 > >類成員函式轉換成void (*)和靜態成員函式獲取非靜態成員變數的方法

類成員函式轉換成void (*)和靜態成員函式獲取非靜態成員變數的方法

很多第三方函式需要把函式轉換成void(*)型別,如libevent 1.4版本中的event_set函式:

如果要傳遞類成員函式給相應的函式我們應該怎樣處理呢?
僅僅傳遞類成員函式可以嗎?
不可以的!編譯的時候會遇到下面的錯誤:
cannot convert DataWatcher::HandlerFn from type void (DataWatcher::)(int, short int, void*) to type  void (*)(int, short int, void*)
那我們應該怎樣解決類似的問題呢?
方法就是宣告該函式為靜態成員函式。靜態成員函式就像普通函式一樣。
如果獲取成員函式的指標,你需要類的例項化獲取!相關內容也可以閱讀下面的資料。
http://tipsandtricks.runicsoft.com/Cpp/MemberFunctionPointers.html


另外,在靜態成員函式中怎樣使用非靜態的成員變數呢?

方法:類的指標作為靜態成員函式的引數即可解決問題,如下圖中的靜態成員函式HandlerFn獲取非靜態成員函式GetBuilderClient():