這幾天看cocos2dx開源代碼,發現了一些比較生疏的用法,不過很高大上哦。對我這C++菜鳥來說也算是充電加油了,下面說下具體的代碼和自己的理解,疏漏之處還望廣大博友熱心指正,小僧不勝感激~~!!!@!@@!@@,進入正題——>
函數指針用法
全局函數指針
成員函數函數指針
—->全局函數指針<——
一般在C++11之前,我們一般是這樣定義一個函數指針類型。
typedef void (*pFunc)(float,...);
這個大家都很熟悉,首先是typedef關鍵字
定義分類:
1)對變量類型定義
例如:
typedef A B
其中A可以是基礎變量類型,比如int ,char ,unsigned int ,float,等,
也可以是結構,聯合類型
比如我們常見的
typedef struce student{
const char* name;
int age;
}*pStd;
2)對函數類型的定義 ->函數指針
全局函數指針
typedef void/return type of function/
(pFunc/*the pointer of function/)
(int,…/the types of function parameters/);
typedef void/函數返回類型/(pFunc/函數指針/)(int,…/函數參數類型*/);
OK,那麼好了,該如何調用呢?
“`
成員函數函數指針
class C;
typedef void(C::*pFunc)();
void C::fA(){};
void C::fB(pFunc pf){ (this->*pf)()};
void C::fC(){this->fB(&C::fA);};
區別就是多了限定類名~~~沒啥了,很簡單吧。
再來解釋一下cocos2dx代碼中的神操作
**typedef void (Ref::*SEL_CallFunc)();
typedef void (Ref::SEL_CallFuncN)(Node);
typedef void (Ref::SEL_CallFuncND)(Node, void*);
typedef void (Ref::SEL_CallFuncO)(Ref);
typedef void (Ref::SEL_MenuHandler)(Ref);
typedef void (Ref::*SEL_SCHEDULE)(float);
-#define CC_CALLFUNC_SELECTOR(_SELECTOR) static_cast(&_SELECTOR)
-#define CC_CALLFUNCN_SELECTOR(_SELECTOR) static_cast(&_SELECTOR)
-#define CC_CALLFUNCND_SELECTOR(_SELECTOR) static_cast(&_SELECTOR)
-#define CC_CALLFUNCO_SELECTOR(_SELECTOR) static_cast(&_SELECTOR)
-#define CC_MENU_SELECTOR(_SELECTOR) static_cast(&_SELECTOR)
-#define CC_SCHEDULE_SELECTOR(_SELECTOR) static_cast(&_SELECTOR)**
詳解可見
http://blog.csdn.net/q229827701/article/details/41479753