lambda表达式中的return语句

时间:2010-07-22 14:48:55

标签: c++ boost-lambda

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

在其中有类似这样的代码,但我有建议错误告诉我

error: expected primary-expression before ‘return’
error: expected `]' before ‘return’

在我的脑海中,我认为boost-lambda主要与仿函数一起工作,所以自return语句以来就不是这样,调用它不起作用。

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

由于 AFG

namespace bl = boost::lambda;
int 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(), (
// ..do stuff here
if_(  a_ > _b_ )
[
std::cout << _1,
 return
]
));

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

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

Explanation & Example

答案 2 :(得分:0)

@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;
  }
);