2

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

其中有这样的代码,但我有构建错误告诉我

错误:“返回”之前的预期主表达式
错误:在“返回”之前需要“]”

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

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

谢谢AFG

命名空间 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 << _1,
 返回
]
));
4

3 回答 3

4

您不能return在 lambda 表达式中使用指令。使用像if_then_else_return. 它们提供允许产生结果的语法。但在你的情况下return甚至不需要,把它扔掉。

于 2010-07-22T14:53:07.333 回答
4

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

解释和例子

于 2010-07-22T14:55:54.880 回答
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;
  }
);
于 2012-12-03T04:40:00.723 回答