【发布时间】:2013-11-17 13:16:21
【问题描述】:
我正在使用 cocos2d-x 2.2 制作游戏,我在 xcode 和 ios 上编译和构建 c++11 的东西没有问题。在 android 项目上编译和构建也没有问题。
但问题是我在尝试使用 lambda 函数调用 c++11 功能 std::function 时遇到运行时错误。
11-17 00:13:38.201:A/libc(5419):致命信号 11 (SIGSEGV) 位于 0x000001d0 (code=1),线程 5446 (Thread-27308)
代码没什么特别的。 std::function 类型的成员变量,保存 lambda 函数,称为特定时序。
会有什么问题?我的测试设备是 Gallxy 4s。
完全相同的代码在 ios 7 和 iPhone 4 上运行良好。
任何建议都会很棒。
编辑1。添加了简化代码。
class SimpleObject {
typedef std::function<void (unsigned bx, unsigned by)> ClickEventHandler_t;
ClickEventHandler_t m_click_handler;
void SetClickEventHandler(ClickEventHandler_t handler) { m_click_handler = handler; }
};
// setup
obj->SetClickEventHandler([this](unsigned bx, unsigned by) { TrapClicked(bx, by); });
void TrapClicked(unsigned bx, by)
{
CCLog("Trap clicked!");
}
// call
if (m_click_handler)
m_click_handler(boardx, boardy);
【问题讨论】:
-
你能分享一下有问题的代码吗? “没什么特别的”有点含糊。
-
我添加了一些代码。我认为代码不会是问题,因为它在 ios 中运行良好。
-
供将来参考:不要将代码粘贴在
<pre></pre>标记之间,而是将整个代码块缩进四个空格。您可以通过选择整个代码块并点击问题/答案编辑器中的{}按钮来快速完成此操作。 -
@Casey / 哦,这是个好建议。我不知道。谢谢;)
-
你使用的安卓编译器是什么?您在该 lambda 中捕获的
this的生命周期是多少?
标签: android c++11 lambda cocos2d-x