cocos2dx中CC_CALLBACK_N的理解
来源:互联网 发布:快压mac版 编辑:程序博客网 时间:2024/05/01 08:13
/*针对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.5std::function<void (Node* node, float a)> f3 = std::bind(&HelloWorld::callback2, this, std::placeholders::_1, 0.5);//看了上面介绍应该很好理解上面的CC_CALLBACK_N//最后简单介绍一下std::function/*std::function它是函数、函数对象、函数指针、和成员函数的包装器,可以容纳任何类型的函数对象,函数指针,引用函数,成员函数的指针。以统一的方式处理函数、函数对象、函数指针、和成员函数。允许保存和延迟执行函数。*/
0 0
- cocos2dx中CC_CALLBACK_N的理解
- cocos2dx 3.0 之 用std::bind替换CC_CALLBACK_N
- quick-cocos2dx中AssetsManagerEx的理解
- quick-cocos2dx中AssetsManagerEx的理解
- quick-cocos2dx中AssetsManagerEx的理解
- cocos2dx--sprite的理解
- cocos2dx scene的理解
- 记录一下Cocos2dX中内存管理的理解和试验
- 关于cocos2dx中create和new的理解
- cocos2dx 使用过程中内存管理的理解
- cocos2dx 中查看cocos2dx 的版本
- cocos2dx-lua 对lua项目中class(sub,super)的理解
- Cocos2dx android 部分代码的理解
- 三分钟理解cocos2dx的内存管理
- 我所理解的cocos2dx 第一章总结
- 我所理解的cocos2dx 第二章
- cocos2dx 3.2 屏幕适配的理解
- 我对cocos2dx的理解和总结
- Tcp上传文件 服务器端
- Android开发之WebView和JS交互详解
- Windows下使用code::blocks开发cocos2dx
- 打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。
- 获取iPhone iPad UDID的方法
- cocos2dx中CC_CALLBACK_N的理解
- MongoDB使用小结:一些常用操作分享
- Web报表工具FineReport二次开发JS之字符串
- HIBERNATE与 MYBATIS的对比
- 以platform总线方式注册杂项设备驱动
- 金额转换,阿拉伯数字转换成中国传统形式
- Java微信公众平台开发(八)——多媒体消息回复
- TuShare(3):使用pandas 压缩存储hdf5文件
- HTML学习(五)——超链接