C++中怎么獲取類的成員函數的函數指針?
睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接
用一個實際代碼來說明。
- class A
- {
- public:
- staticvoid staticmember(){cout<<"static"<<endl;} //static member
- void nonstatic(){cout<<"nonstatic"<<endl;} //nonstatic member
- virtualvoid virtualmember(){cout<<"virtual"<<endl;};//virtual member
- };
- int main()
- {
- A a;
- //static成員函數,取得的是該函數在內存中的實際地址,而且因為static成員是全局的,所以不能用A::限定符
- void(*ptrstatic)()=&A::staticmember;
- //nonstatic成員函數 取得的是該函數在內存中的實際地址
- void(A::*ptrnonstatic)()=&A::nonstatic;
- //虛函數取得的是虛函數表中的偏移值,這樣可以保證能過指針調用時同樣的多態效果
- void(A::*ptrvirtual)()=&A::virtualmember;
- //函數指針的使用方式
- ptrstatic();
- (a.*ptrnonstatic)();
- (a.*ptrvirtual)();
- }
可以參考《C++ Primer(3rd)》第532頁13.6指向類成員的指針一節~
1.一個指向外部函數的指針聲明為:
- void(*pf)(char*,constchar*);
- void strcpy(char* dest,constchar* source);
- pf=strcpy;
2.一個指向類A成員函數的指針聲明為:
- void(A::*pmf)(char*,constchar*);
聲明的解釋是:pmf是一個指向A成員函數的指針,返回無類型值,函數帶有二個參數,參數的類型分別是char * 和 const char *。除了在星號前增加A:: ,與聲明外部函數指針的方法一樣。
3.給成員指針賦值的方法是將函數名通過指針符號&賦予指針名。
如下所示:
- class A
- {
- public:
- void strcpy(char*,constchar*);
- void strcat(char*,constchar*);
- };
- pmf =&A::strcpy;