參考文章: 暴躁的野生猿<指向成員函數(shù)的函數(shù)指針>
適用于想通過一個指針數(shù)組下標(biāo)的方式調(diào)用類中的一系列相關(guān)成員函數(shù)時
在類成員中定義函數(shù)指針或函數(shù)指針數(shù)組
- 建議通過
typedef
的方式提前定義好函數(shù)指針的類型,然后在定義數(shù)組,增加可讀性 - 注意:指向成員函數(shù)的函數(shù)指針
變量
的定義pFunc
要將類名::*變量名
用()
括起來
typedef void(className::*pFunc)(int); // 控制軸旋轉(zhuǎn)的函數(shù)指針類型
pFunc jointRotate[6]; // 控制軸旋轉(zhuǎn)的函數(shù)指針數(shù)組
- 賦值的時候注意: 成員函數(shù)地址為
&類名::成員函數(shù)名
,與C語言風(fēng)格相比司光,C++必須要加&
符號
pFunc jointRotate[6] = { &className::J1Rotate,
&className::J2Rotate,
&className::J3Rotate,
&className::J4Rotate,
&className::J5Rotate,
&className::J6Rotate,};
- 使用的時候注意指針數(shù)組作為一個類的成員必須通過
this->
obj.
pObg->
的方式調(diào)用
typedef void(className::*pFunc)(int);
this->jointRotate[0](90);
obj.jointRotate[0](90);
pObg->jointRotate[0](90);
- 附:單個函數(shù)指針的調(diào)用,使用成員
函數(shù)指針運(yùn)算符
.*
該運(yùn)算符不支持重載
typedef void(className::*pFuncType)(void);
className obj;
pFuncType pFunc = &className::J1Rotate;
int a = (obj.*p)();
C語言中的函數(shù)指針
- 函數(shù)地址:函數(shù)名或&函數(shù)名瓮恭,兩者均可。
- 函數(shù)指針變量的定義方法:把函數(shù)名替換為你喜歡的變量名,并在前面加
*
號,并把*
號和函數(shù)名
用()
起來。
char (*parseFrame)(char* frame, int len);
- 舉例 : 兩種方式,推薦第二種typedef的方式:
// 方式一:
char *(*pFunc)(char* frame, int len);
pFunc = parseFrame;
// 方式二:
typedef char *(*ParseFunc)(char* frame, int len);
ParseFunc pFunc;
pFunc = parseFrame;
pFunc = &parseFrame; // 都可以