Question

J'ai créé une expression lambda dans mon std::for_each appel.

Il y a du code comme celui-ci, mais j'ai une erreur de construction qui me dit que

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

Dans ma tête je pense que boost-lambda fonctionne principalement avec des foncteurs, donc puisque return déclaration, ce n'est pas comme ça, l'appeler ne fonctionne pas.

Savez-vous ce que c'est et comment y remédier ?

Merci 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
]
));
Était-ce utile?

La solution

Vous ne pouvez pas utiliser return instruction à l’intérieur de l’expression lambda.Utilisez des constructions comme if_then_else_return.Ils proposent une syntaxe qui permet de produire des résultats.Mais dans ton cas return n'est même pas nécessaire, jetez-le simplement.

Autres conseils

oubliez simplement boost-lambda et utilisez plutôt la nouvelle expression lambda standard C++.

Explication et exemple

@MBZ a raison, utilisez C++11 (mais pas lambda dans ce cas).

Voici votre code avec C++11 :

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

Bien sûr toi pourrait faites la même chose avec les lambdas, mais pourquoi compliquer les choses comme le code ci-dessous ?

int a, b;
std::vector<int> v;
std::for_each(v.begin(), v.end(), 
  [&a,&b](int e)
  {
    if(a > b)
      std::cout << e;
  }
);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top