1 typedef void (CCObject::*SEL_SCHEDULE)(float);
2 typedef void (CCObject::*SEL_CallFunc)();
3 typedef void (CCObject::*SEL_CallFuncN)(CCNode*);
4 typedef void (CCObject::*SEL_CallFuncND)(CCNode*, void*);
5 typedef void (CCObject::*SEL_CallFuncO)(CCObject*);
6 typedef void (CCObject::*SEL_MenuHandler)(CCObject*);
7 typedef void (CCObject::*SEL_EventHandler)(CCEvent*);
8 typedef int (CCObject::*SEL_Compare)(CCObject*);
9 #define schedule_selector(_SELECTOR) (SEL_SCHEDULE)(&_SELECTOR)
10 #define callfunc_selector(_SELECTOR) (SEL_CallFunc)(&_SELECTOR)
11 #define callfuncN_selector(_SELECTOR) (SEL_CallFuncN)(&_SELECTOR)
12 #define callfuncND_selector(_SELECTOR) (SEL_CallFuncND)(&_SELECTOR)
13 #define callfuncO_selector(_SELECTOR) (SEL_CallFuncO)(&_SELECTOR)
14 #define menu_selector(_SELECTOR) (SEL_MenuHandler)(&_SELECTOR)
15 #define event_selector(_SELECTOR) (SEL_EventHandler)(&_SELECTOR)
16 #define compare_selector(_SELECTOR) (SEL_Compare)(&_SELECTOR)
其实这些都是函数的指针,例如第一个和9拿出来
typedef void (CCObject::*SEL_SCHEDULE)(float);
#define schedule_selector(_SELECTOR) (SEL_SCHEDULE)(&_SELECTOR)
先看上面 顶一了一个 指向CCobject指针的指针,这个指针指向一个带一个float类型的参数的返回值为void的函数
接着下面的宏替换 当我们scedule_selector(xxxxxx);时
自动替换成
(SEL_SCHEDULE)(&_SELECTOR)
将我们传进来的_SELECTOR函数指针强制转换成 指向一个带一个float类型的参数的返回值为void的指针