cocos2dx源码之 选择器

来源:互联网 发布:网站建设优化推广 编辑:程序博客网 时间:2024/06/05 15:44


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<cocos2d::SEL_CallFunc>(&_SELECTOR)

#define CC_CALLFUNCN_SELECTOR(_SELECTOR) static_cast<cocos2d::SEL_CallFuncN>(&_SELECTOR)

#define CC_CALLFUNCND_SELECTOR(_SELECTOR) static_cast<cocos2d::SEL_CallFuncND>(&_SELECTOR)

#define CC_CALLFUNCO_SELECTOR(_SELECTOR) static_cast<cocos2d::SEL_CallFuncO>(&_SELECTOR)

#define CC_MENU_SELECTOR(_SELECTOR) static_cast<cocos2d::SEL_MenuHandler>(&_SELECTOR)

#define CC_SCHEDULE_SELECTOR(_SELECTOR) static_cast<cocos2d::SEL_SCHEDULE>(&_SELECTOR)


首先,定义无返回值无参一个[函数]是这样滴~

void func();


定义这个无返回值无参的[函数指针]呢,

void (*func)(); //用括号把*和func括起来,是为了防止和返回void指针并且无参的函数(即void* func())区分开来。


定义一个无返回值无参的[函数指针]每次都要这么写,编写c语言规则的人肯定觉得会很蛋疼,为了方便大众,创造了一个定义一个[函数指针类型]的方法。

即: typedef 返回值 (命名空间::*函数指针类型名字)(参数列表)

    typedef void (*func)(void)//定义一个无返回值无参的指针类型,叫func,和int float一样,它是一个类型

不要觉得这个typedef和以前看过的不一样,不太顺眼,这只是一个固有用法而已,记住即可。不必纠结。


至于下面大选择器就比较好解释了,

一般使用的时候都是这么使用的,CC_SCHEDULE_SELECTOR(XXXNode::func);

即 static_cast<cocos2d::SEL_SCHEDULE>(&XXXNode::func);

大家都知道,&取地址操作,返回值是一个void*类型,即[无类型的指针]

要想使用它必须把它强制转换成能用的类型,

就是func类型,所以我们也可以写一个无返回值无参的选择器

#define CC_NOPARAM_NORETURN_SELECTOR(_SELECTOR) static_cast<func>(&_SELECTOR)


最后说上几句,

这都是我个人对这些代码的理解,如果觉得有错的地方请在下方留言教育。

如果觉得说的还是有点道理的,可以在下面留言留下想下一期解析什么地方的代码。



0 0
原创粉丝点击