【发布时间】:2014-05-20 17:49:53
【问题描述】:
当我阅读Cocos2dx 3.0 API 时,我发现了这样的内容:
auto listener = [this](Event* event){
auto keyboardEvent = static_cast<EventKeyboard*>(event);
if (keyboardEvent->_isPressed)
{
if (onKeyPressed != nullptr)
onKeyPressed(keyboardEvent->_keyCode, event);
}
else
{
if (onKeyReleased != nullptr)
onKeyReleased(keyboardEvent->_keyCode, event);
}
};
[this] 是什么意思?这是C++11 中的新语法吗?
【问题讨论】:
-
这是一个 lambda,您正在将当前实例绑定到它。
-
表示你捕获了
this。 -
明确提及
this真的有意义吗?它不会被onKeyPressed和onKeyReleased的引用自动捕获(假设它们是this的成员)。还有一个警告,keyboardEvent现在持有this指针的副本...如果keyboardEvent设法比this指向的任何东西寿命长...(标准对象生命周期问题)跨度> -
所有具有 [](){} 形式的东西都是 lambda(是的,这是 C++11 的新功能)。
-
使用
auto关键字和空指针文字nullptr的自动类型推导也是C++11。
标签: c++ api c++11 syntax cocos2d-x