cocos2dx中CC_CALLBACK_N的理解

/*针对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
它是函数、函数对象、函数指针、和成员函数的包装器,可以容纳任何类型的函数对象,函数指针,引用函数,成员函数的指针。
以统一的方式处理函数、函数对象、函数指针、和成员函数。允许保存和延迟执行函数。
*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值