cocos2d-x 3.3 CC_CALLBACK_0 std::bind与std::function
发布时间:2020-12-14 16:53:42 所属栏目:百科 来源:网络整理
导读:测试AssetsManager,发现create里需要传入3个回调,自己尝试多次都是编译失败,于是查了点资料,记录下,备查。 需要传回调函数,直接使用宏里的CC_CALLBACK_X系列函数即可,后面的X代表回调需要传递的参数个数。 在cocosbaseccMacros.h里可以看到宏定义的
测试AssetsManager,发现create里需要传入3个回调,自己尝试多次都是编译失败,于是查了点资料,记录下,备查。
需要传回调函数,直接使用宏里的CC_CALLBACK_X系列函数即可,后面的X代表回调需要传递的参数个数。
在cocosbaseccMacros.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的新特性。
简单解释一下就是:
一个栗子: 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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |