在C ++ </void(ref *)>中std :: function <void(ref *)>的含义是什么?

时间:2015-03-05 02:12:18

标签: c++ c++11 lambda cocos2d-x

我遇到了这个功能的麻烦,我不知道它的含义是什么:

menuItem1->setCallback([&](cocos2d::Ref *sender)

输入功能,参数是ccMenuCallback&amp;:

    /** set the callback to the menu item
    * @code
    * In js,can contain two params,the second param is jsptr
    * @endcode
    * @lua NA
    */
    void setCallback(const ccMenuCallback& callback);

并且

typedef std::function<void(Ref*)> ccMenuCallback;

3 个答案:

答案 0 :(得分:5)

这是一个C ++ 11 lambda

基本上setCallback接受std::function作为参数接受cocos2d::Ref*并返回void。这是一种能够保持可调用功能的类型。

lambda是一个匿名函数,在这种情况下存储在std::function<void(cocos2d::Ref*)>变量中并传递给函数。

确实是这样的:

auto lambda = [&](cocos2d::Ref* sender) {
  /* implementation */
};
// ^ store the anonymous function in a variable

menuItem1->setCallBack(lambda);

答案 1 :(得分:3)

std :: function可以保存函数指针,方法绑定,lambda表达式和任何带有重载operator()的对象

void someFunc(cocos2d::Ref *sender)
{
    //some code
}

std::function<void(Ref*)> f1 = someFunc;
std::function<void(Ref*)> f2 = [&](cocos2d::Ref *sender) {
    //some code
}

可能是void setCallback(const ccMenuCallback&amp; callback);接受在单击菜单项或类似菜单项时调用的回调。

答案 2 :(得分:1)

此表达式为lambda

[&](cocos2d::Ref *sender)