cocos2dx中CC_CALLBACK_N的理解
2016-03-31 11:54
513 查看
/*针对cocos2d-x CC_CALLBACK_N的使用介绍*/ //首先看一下cocos2dx中的源码 // new callbacks based on C++11 #define CC_CALLBACK_0(__selector__,__target__, ...) std::bind(&__selector__,__target__, ##__VA_ARGS__) #define CC_CALLBACK_1(__selector__,__target__, ...) std::bind(&__selector__,__target__, std::placeholders::_1, ##__VA_ARGS__) #define CC_CALLBACK_2(__selector__,__target__, ...) std::bind(&__selector__,__target__, std::placeholders::_1, std::placeholders::_2, ##__VA_ARGS__) #define CC_CALLBACK_3(__selector__,__target__, ...) std::bind(&__selector__,__target__, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, ##__VA_ARGS__) //CC_CALLBACK_N是一些宏定义,这里是用到了std::bind,所以我们介绍一下std::bind /*std::bind绑定器 std::bind用来将可调用对象与其参数一起进行绑定。绑定后的结果可以使用std::function进行保存,并延迟调用到任何我们需要的时候。通俗来讲,它主要有两大作用: 1).将可调用对象与其参数一起绑定成一个仿函数。 2).将多元(参数个数为n,n>1)可调用对象转成一元或者(n-1)元可调用对象,即只绑定部分参数。 function模板类和bind模板函数,都可以实现类似函数指针的功能,但却却比函数指针更加灵活,特别是函数指向类的非静态成员函数时。 1).std::function可以绑定到全局函数/类静态成员函数(类静态成员函数与全局函数没有区别)。 2).绑定到类的非静态成员函数,则需要使用std::bind。*/ //这里介绍一下std::bind的用法 //绑定全局或静态函数 std::function<void(int)> f1 = std::bind(func, std::placeholders::_1); //func是一个全局或静态函数 //绑定带参数的成员函数 //ReadHandler::ConnectPreProcess是成员函数,所以第二个参数传入是this指针,来绑定对象,要知道成员函数和普通函数的区别在于是否含有this指针 std::function<void (char*, int)> f2 = std::bind(ReadHandler::ConnectPreProcess, this, std::placeholders::_1, std::placeholders::_2); //接着介绍一下std::placeholders::_1是不定参数,这个好比占位符 //就是说明f1中的参数,现在不指定,调用的时候再传入 //最后理解##__VA_ARGS__(可变参数列表)看一下下面这个函数应该很好理解 //这个就表示现在要传入的参数列表,并且可以传多个(上面用...表示) //参数node现在不定,需要调用时候传入,参数a现在传入0.5 std::function<void (Node* node, float a)> f3 = std::bind(&HelloWorld::callback2, this, std::placeholders::_1, 0.5); //看了上面介绍应该很好理解上面的CC_CALLBACK_N //最后简单介绍一下std::function /*std::function 它是函数、函数对象、函数指针、和成员函数的包装器,可以容纳任何类型的函数对象,函数指针,引用函数,成员函数的指针。 以统一的方式处理函数、函数对象、函数指针、和成员函数。允许保存和延迟执行函数。 */
相关文章推荐
- Windows下使用code::blocks开发cocos2dx
- cocos2d-x通过源代码理解菜单项创建时传入的回调函数实现机制
- cocos2dx 3.3 + lua 学习笔记(01)--- math库
- cocos学习心得3
- Xcode 7.3编译的cocos2d-x程序崩溃问题
- CocosCreator教程资料索引[2016.2.18已更新]
- quick-cocos2dx 之transition.execute()的缓动效果
- cocos2d_x_08_游戏_FlappyBird
- cocos2dx3.x+cocostudio多屏幕分辨率适配解决方案(干货)
- cocos打包Android
- cocos-lua 延时执行 和 scheduler
- cocos2dx中DrawNode画线锯齿和非凸多边形填充
- cocos2dx3.2 lua 独立自定义socket类绑定问题
- cocos2dx3.0rc导出自定义类到lua的方法详细步骤
- cocos2dx 对象属性设置
- cocos2d-x避免手动修改android.mk文件来编译
- Cocos2d-x游戏中默认的AndroidManifest.xml的解析
- cocos2dx TexturePacker加密资源
- cocos2dx 3.xLua脚本加密解密
- cocos2dx 外观者模式