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 (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