C++之 函數指針

這幾天看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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章