【问题标题】:return statement in lambda expressionlambda 表达式中的 return 语句
【发布时间】:2011-03-19 14:49:28
【问题描述】:

我在std::for_each 调用中创建了一个 lambda 表达式。

里面有类似这样的代码,但是我有构建错误告诉我

错误:“return”之前的预期主表达式 错误:在“return”之前需要 `]'

在我的脑海中,我认为boost-lambda 主要与函子一起工作,所以由于return 声明它不是那样的,调用它是行不通的。

你知道它是什么以及如何解决它吗?

谢谢 自动对焦

命名空间 bl = boost::lambda; 整数a,b; bl::var_type::type a_(bl::var(a)); bl::var_type::type b_( bl::var( b ) ); std::for_each(v.begin(), v.end(), ( // ..在这里做点什么 如果_(a_>_b_) [ std::cout

【问题讨论】:

    标签: c++ boost-lambda


    【解决方案1】:

    @MBZ 是对的,使用 C++11(但在这种情况下不是 lambda)。

    这是你的 C++11 代码:

    int a, b;
    std::vector<int> v;
    for(int e : v)
    {
      if(a > b)
        std::cout << e;
    }
    

    当然你可以对 lambdas 做同样的事情,但是为什么要复杂化它就像下面的代码?

    int a, b;
    std::vector<int> v;
    std::for_each(v.begin(), v.end(), 
      [&a,&b](int e)
      {
        if(a > b)
          std::cout << e;
      }
    );
    

    【讨论】:

      【解决方案2】:

      忘记 boost-lambda 并改用新的标准 C++ lambda 表达式。

      Explanation & Example

      【讨论】:

      • 其实他最好不要在这里使用 lambdas,看看我的回答。
      【解决方案3】:

      您不能在 lambda 表达式中使用 return 指令。使用像if_then_else_return 这样的结构。它们提供允许产生结果的语法。 但在您的情况下,return 甚至不需要,只需将其扔掉即可。

      【讨论】:

        猜你喜欢
        • 2015-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-19
        • 2016-12-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多