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

标签 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 选择器吗?

最佳答案

这是关于您的回调函数期望的参数数量。

来自文档:

#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/

相关文章:

c++ - 要检查 SetFilePointerEx、ReadFile 或 WriteFile 是否成功,我是否需要检查 lpNewFilePointer、lpNumberOfBytesRead 和 lpNumberOfBytesWritten?

c++ - 指向结构的二维数组。内存访问问题

c++ - 一次输出整个数组

android - COCOS-2d-x : Idea to implement Level progress in games

android - 如何在 Cocos2d-x 中使用 Android Studio

c++ - Visp 库 - 如何调整图像大小

c++ - 继承和指针数组

android - 在 Cocos2d-x 中比较字符串时出错

c++ - 如何在cocos2dx中绘制凹(凹)实心多边形

android - (Cocos2dx-v3) Android - 如何解决 "cocos2d.h: No such file or directory"?