所有CC_CALLBACK_#宏之间有什么区别?

时间:2014-06-15 19:42:53

标签: c++ cocos2d-x

我是cocos2dx和c ++的新手。我一直在搞乱首发HellowWorldScene并注意到这一行:

auto closeItem = MenuItemImage::create(
                                       "CloseNormal.png",
                                       "CloseSelected.png",
                                       CC_CALLBACK_1(HelloWorld::menuCloseCallback, this));

当我将CC_CALLBACK更改为CC_CALLBACK_2时,xcode会抱怨“没有匹配的函数来调用'create'”。这是为什么? CC_CALLBACK结尾的数字是什么意思?函数也可以只接受一种类型的CC_CALLBACK选择器吗?

1 个答案:

答案 0 :(得分:3)

这与您的回调函数所期望的参数数量有关。

来自文档:

#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::placeholderslink

如果有什么不清楚,请告诉我!