оператор возврата в лямбда-выражении - PullRequest
2 голосов
/ 22 июля 2010

Я создал лямбда-выражение внутри моего std::for_each вызова.

В нем есть код, подобный этому, но у меня есть ошибка сборки, сообщающая мне, что

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 ]

4 голосов
/ 22 июля 2010

Вы не можете использовать инструкцию return внутри лямбда-выражения.Используйте конструкции типа if_then_else_return.Они предлагают синтаксис, который позволяет производить результаты.Но в вашем случае return даже не требуется, просто выбросьте его.

3 голосов
/ 22 июля 2010

просто забудьте boost-lambda и используйте вместо него новое стандартное лямбда-выражение C ++.

Объяснение и пример

0 голосов
/ 03 декабря 2012

@ MBZ правильно, используйте C ++ 11 (но не лямбда в этом случае).

Вот ваш код с C ++ 11:

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

Конечно, вы могли бы сделать то же самое с лямбдами, но зачем это усложнять , как в коде ниже?

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