我是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选择器吗?
答案 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::placeholders
:link
如果有什么不清楚,请告诉我!