lambda retournant bool
Je veux trouver le point qui a le moins de coordonnée Y (si plusieurs de ces points, trouver celui avec le plus petit X).
Lors de l'écriture avec lambda:
std::min_element(begin, end, [](PointAndAngle& p1, PointAndAngle& p2) {
if (p1.first->y() < p2.first->y())
return true;
else if (p1.first->y() > p2.first->y())
return false;
else
return p1.first->x() < p2.first->x();
}
J'obtiens:
error C3499: a lambda that has been specified to have a void return type cannot return a value
quelle est la différence entre:
//works
std::min_element(begin, end, [](PointAndAngle& p1, PointAndAngle& p2) {
return p1.first->y() < p2.first->y();
}
et
//does not work
std::min_element(begin, end, [](PointAndAngle& p1, PointAndAngle& p2) {
if (p1.first->y() < p2.first->y())
return true;
else
return false;
}
source d'informationauteur relaxxx | 2011-10-25
Vous devez vous connecter pour publier un commentaire.
Le type de retour de lambdas peuvent être implicitement déduit, mais vous avez besoin d'avoir un seul
return
instruction; c'est pourquoi votre "travail" lambda fonctionne (type de retour déduit d'bool
).sehe la solution déclare explicitement le type de retour, de sorte qu'il fonctionne très bien.
Mise à jour:
Le C++11, §5.1.2/4 états:
Votre travail lambda tombe dans la deuxième catégorie.
Comme Mike l'a noté, si le lambda du corps d'une seule instruction return, puis le type de retour est déduit que (voir 5.1.2/4) (merci Mike).
Note
-> bool
.