2010-07-22 280 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; 
    } 
);