2010-07-22 61 views
1

我在std::for_each调用中创建了lambda表达式。lambda表达式中的return语句

在这里面有像这样的代码,但我已经建立的错误告诉我,

 
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

不能使用lambda表达式内return指令。使用像if_then_else_return这样的结构。它们提供了可以产生结果的语法。 但在你的情况下return甚至不需要,只是把它扔掉。

3

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

Explanation & Example

+0

其实他最好不要在这里使用lambdas,查看我的答案。 – 2012-12-03 04:43:04

0

@MBZ是正确的,使用C++ 11(但不拉姆达在这种情况下)。

这里是你的代码与C++ 11:

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

当然,你可以与lambda表达式相同,但为什么如下面的代码复杂化呢?

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