我在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 ] ));
答案 0 :(得分:4)
您不能在lambda表达式中使用return
指令。使用if_then_else_return
之类的结构。它们提供允许产生结果的语法。
但在你的情况下,return
甚至不需要,只需扔掉即可。
答案 1 :(得分:3)
忘记boost-lambda并使用新的标准C ++ lambda表达式。
答案 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;
}
);