instruction return dans l'expression lambda
-
27-09-2020 - |
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 ] ));
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++.
@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;
}
);