【问题标题】:What is the meaning of std::function<void(Ref*)> in C++C++中std::function<void(Ref*)>是什么意思
【发布时间】:2015-03-05 02:12:18
【问题描述】:

这个函数我遇到了麻烦,不知道是什么意思:

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

进入函数,参数为ccMenuCallback&:

    /** 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;

【问题讨论】:

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


    【解决方案1】:

    那是 C++11 lambda

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

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

    确实是这样的:

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

    【讨论】:

      【解决方案2】:

      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& callback);接受一个回调,当单击菜单项或类似的东西时调用它。

      【讨论】:

        【解决方案3】:

        这个表达式是lambda:

        [&](cocos2d::Ref *sender)
        

        【讨论】:

          猜你喜欢
          • 2014-03-10
          • 2016-06-11
          • 2012-03-11
          • 2013-03-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-01-26
          • 1970-01-01
          相关资源
          最近更新 更多