cocos2d-x 3.3 CC_CALLBACK_0 std::bind与std::function

cocos2d-x 3.3 CC_CALLBACK_0 std::bind与std::function,第1张

概述测试AssetsManager,发现create里需要传入3个回调,自己尝试多次都是编译失败,于是查了点资料,记录下,备查。 需要传回调函数,直接使用宏里的CC_CALLBACK_X系列函数即可,后面的X代表回调需要传递的参数个数。 在cocos\base\ccMacros.h里可以看到宏定义的具体内容: // new callbacks based on C++11#define CC_CAL

测试AssetsManager,发现create里需要传入3个回调,自己尝试多次都是编译失败,于是查了点资料,记录下,备查。


需要传回调函数,直接使用宏里的CC_CALLBACK_X系列函数即可,后面的X代表回调需要传递的参数个数。


在cocos\base\ccMacros.h里可以看到宏定义的具体内容:

// new callbacks based on C++11#define CC_CALLBACK_0(__selector__,__target__,...) std::bind(&__selector__,##__VA_ARGS__)#define CC_CALLBACK_1(__selector__,std::placeholders::_1,##__VA_ARGS__)#define CC_CALLBACK_2(__selector__,std::placeholders::_2,##__VA_ARGS__)#define CC_CALLBACK_3(__selector__,std::placeholders::_3,##__VA_ARGS__)

看上去是C++11的新特性。


简单解释一下就是:

bind预先绑定的参数需要传具体的变量或值进去,对于预先绑定的参数,是pass-by-value的 对于不事先绑定的参数,需要传std::placeholders进去,从_1开始,依次递增。placeholder是pass-by-reference的 bind的返回值是可调用实体,可以直接赋给std::function对象 对于绑定的指针、引用类型的参数,使用者需要保证在可调用实体调用之前,这些参数是可用的 类的this可以通过对象或者指针来绑定

一个栗子:

CC_CALLBACK_1(HelloWorld::f1,this)voID HelloWorld::f1(int nCode)

上面,先看f1函数,有一个参数,是不能事先绑定的参数,所以使用CC_CALLBACK_1,this是预先绑定的参数,后面还可以加上其他可预先绑定的参数,比如这样:

CC_CALLBACK_1(HelloWorld::f1,this,nNum,nID)
上面的nNum和nID都是可预先绑定的,就是每次调用f1的时候,this、nNum和nID的值都是一样的。

std::placeholders::_1就对应nCode这个不可预先绑定的参数,也就是f1的参数,每次都可能是不一样的。



参考链接:http://www.cnblogs.com/slysky/p/3822640.html

总结

以上是内存溢出为你收集整理的cocos2d-x 3.3 CC_CALLBACK_0 std::bind与std::function全部内容,希望文章能够帮你解决cocos2d-x 3.3 CC_CALLBACK_0 std::bind与std::function所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1077441.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存