en utilisant la lambda expression et find_if sur une collection
J'ai un objet conteneur :
R Container;
R est de type list<T*>
ou vector<T*>
Je suis en train d'écrire la fonction suivante:
template<typename T, typename R>
T& tContainer_t<T, R>::Find( T const item ) const
{
typename R::const_iterator it = std::find_if(Container.begin(), Container.end(), [item](const R&v) { return item == v; });
if (it != Container.end())
return (**it);
else
throw Exception("Item not found in container");
}
Lorsque vous essayez la méthode (v est un objet de ma classe)
double f = 1.1;
v.Find(f);
- Je obtenir binary '==' : no operator found which takes a left-hand operand of type 'const double' (or there is no acceptable conversion)
Je suis confondue avec l'expression lambda syntaxe et ce que je dois écrire et je ne trouve pas d'explication amicale.
Quel est le problème ? 10x.
Envisageriez-vous d'écrire le Trouver la signature de l'acceptation de la
Vous êtes de passage à un
(const T item)
au lieu de (T const item)
? Ou mieux encore, utiliser const T &item
.Vous êtes de passage à un
const R &
comme argument pour le lambda au lieu d'un const T*
.OriginalL'auteur Michael | 2012-05-23
Vous devez vous connecter pour publier un commentaire.
Manque un peu de contexte, mais je note:
**it
si vous le souhaitez comparer*v==itemt
const R&v
où je soupçonne que vous vouliez direconst T&v
dans le lambdaVoici code du travail, dépouillé de la catégorie manquante références:
typename R::const_iterator it = std::find_if(Container.begin(), Container.end(), [item](const T* v) { return *v == item; });
Peut le faux downvoter veuillez expliquer lui même :/
OriginalL'auteur sehe