函數指針是指向函數的指針變量。函數指針可以像一般函數一樣,用于調用函數、傳遞參數。函數指針只能指向具有特定特征的函數。因而所有被同一指針運用的函數必須具有相同的參數和返回類型。類成員函數指針,是C++語言的一類指針數據類型,用于存儲一個指定類具有給定的形參列表與返回值類型的成員函數的訪問信息。類成員函數指針是一類指針數據類型,C++的語法之一,主要用途是把數據與相關代碼結合在一起。這與委托、函子、閉包等概念很像。雖然C++對此支持的并不太好。MFC類體系中,Windows消息傳遞處理機制是基于CCmdTarget類及其派生類的靜態數據成員與靜態成員函數。用戶所寫的類中的Windows消息處理函數必須轉換為CCmdTarget::*的成員函數指針類型AFX_PMSG,保存在該用戶類的_messageEntries靜態數組中。
成員函數指針的語法是什么?
使用::*聲明一個成員指針類型,或者定義一個成員指針變量。使用.*或者->*調用類成員函數指針所指向的函數,這時必須綁定(binding)于成員指針所屬類的一個實例的地址。由于C++運算符優先級列表中,函數調用運算符()的優先級高于.*與->*,因此成員函數指針所指的函數被調用時,必須把實例對象或實例指針、.*或->*運算符、成員函數指針用括號括起來,如上例所示。C++標準規定,非靜態成員函數不是左值,因此非靜態成員函數不存在表達式中從函數左值到指針右值的隱式轉換,非靜態成員函數指針必須通過&運算符顯式獲得。所以上例中,pmf = X::f; 將編譯報錯。