J'ai une classe comme çautilisant boost :: lambda ou boost :: Phoenix avec std :: find_if
class Foo {
public:
int GetID() const { return m_id; }
private:
int m_id;
};
Je veux utiliser find_if sur un vecteur plein d'objets Foo, comme ceci:
std::find_if(foos.begin(), foos.end(), ???.GetID() == 42);
Je ne comprends pas ce que j'ai à écrire au lieu de ??? Je sais qu'il y a soit _1 avec boost :: lambda ou arg1 avec boost :: phoenix, mais après ça je suis à perte.
Edit:
J'ai essayé le suivant qui ne fonctionne pas, même si je l'ai vu comme ça dans de nombreux exemples.
std::find_if(foos.begin(), foos.end(), boost::lambda::bind(&Foo::GetID, boost::lambda::_1) == 42);
Puis-je obtenir l'erreur suivante:
error C2678: binary '==' : no operator found which takes a left-hand operand of type 'const boost::lambda::lambda_functor' (or there is no acceptable conversion)
pourquoi le faire vous-même lorsque vous pouvez utiliser la C++ 11 standard? –
@David Haim: Je voudrais pouvoir;) – gartenriese
'std :: find_if (foos.begin(), foos.end(), (& boost :: phoenix :: placeholders :: _ 1 -> * & Foo :: GetID) () == 42); ' –