cocos进阶教程(5)CC_CALLBACK_X系列的使用技巧
2015-12-04 18:46
507 查看
CC_CALLBACK_1,CC_CALLBACK_2,CC_CALLBACK_3
这些都是std::bind的宏,数字1,2,3主要表示要占位的数量,也是将来传递参数的数量。
// 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__)
对应的std::bind有几个占位符std::placeholders::_1,std::placeholders::_2,std::placeholders::_3等,这些占位符才是我们在调用具体函数(&__selector__)的时候需要传入的参数,说白了就是告诉我们目标&__selector__的前面多少位需要传递参数的,CC_CALLBACK_2(__selector__,__target__, ...)这里的...也是可传入参数,但是这个参数不能取代占位参数的,占位参数只可以在调用的传递过去,这里的参数是站位参数以后的参数 给赋值个默认值而已。
举例说明
HelloWorld::sayName(name1, name2, name3, name4, name5){
}
CC_CALLBACK_3(self::sayName, self, "小明", "小丽") 这句话就是std::bind(&__selector__,__target__, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3,"小明","小丽")
假设
auto delegateFucName = std::bind(&__selector__,__target__, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3,"小明","小丽")
delegateFucName(...)这个时候...就是要传递的3个占位符的值,delegateFucName("小雪","小风","小花")
最终就是占位符传递参数("小雪","小风","小花")+CC_CALLBACK_3后续参数("小明","小丽")完成目标函数sayName的参数构成
这些都是std::bind的宏,数字1,2,3主要表示要占位的数量,也是将来传递参数的数量。
// 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__)
对应的std::bind有几个占位符std::placeholders::_1,std::placeholders::_2,std::placeholders::_3等,这些占位符才是我们在调用具体函数(&__selector__)的时候需要传入的参数,说白了就是告诉我们目标&__selector__的前面多少位需要传递参数的,CC_CALLBACK_2(__selector__,__target__, ...)这里的...也是可传入参数,但是这个参数不能取代占位参数的,占位参数只可以在调用的传递过去,这里的参数是站位参数以后的参数 给赋值个默认值而已。
举例说明
HelloWorld::sayName(name1, name2, name3, name4, name5){
}
CC_CALLBACK_3(self::sayName, self, "小明", "小丽") 这句话就是std::bind(&__selector__,__target__, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3,"小明","小丽")
假设
auto delegateFucName = std::bind(&__selector__,__target__, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3,"小明","小丽")
delegateFucName(...)这个时候...就是要传递的3个占位符的值,delegateFucName("小雪","小风","小花")
最终就是占位符传递参数("小雪","小风","小花")+CC_CALLBACK_3后续参数("小明","小丽")完成目标函数sayName的参数构成
相关文章推荐
- cocos2dx-Lua与Object的通讯机制
- cocos2dx-Lua与Java通讯机制
- cocos 2dx 换机器编译的时候出现No rule to make target 问题
- 十、cocos2d-x 字体描边和制作阴影
- VS2013 + quick-cocos2dx + BabeLua 环境搭建
- Cocos2d-x中__Dictionary,SQLite数据处理
- cocos2d-x -----文件的读取
- cocos2dx-3.4 编译apk包 文件名、目录名或卷标语法不正确 解决方案
- Cocos2D-x HelloWorld代码执行过程
- 【cocos2d-x打包问题】之“serializing cdt project settings” has encountered a problem
- cocos2d-js开发总结
- 【Cocos2d-x 3.x】 事件处理机制源码分析
- cocos2d-x札记 (二)----CCDirector深入
- cocos2d-x 学习笔记3
- COCOS2D-3.9 FileUtils 分析(一)
- 【Cocos2d-x学习记录】基于Mac OS iPhone开发环境搭建
- cocos2d 消息映射
- quick-cocos2dx修改java文件后如何生效
- cocos2d-x getVisibleSize , getVisibleOrigin 和坐标位置日记
- Cocos2D中Node的userObject实例变量使用时一个要注意的地方