我是 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 选择器吗?
最佳答案
这是关于您的回调函数期望的参数数量。
来自文档:
#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
如果有任何不清楚的地方,请告诉我!
关于c++ - 所有 CC_CALLBACK_# 宏之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24233439/