У меня есть класс, как этотиспользуя подталкивание :: лямбда или повышение :: феникс с станд :: find_if
class Foo {
public:
int GetID() const { return m_id; }
private:
int m_id;
};
Я хочу использовать find_if на вектор полной объектов Foo, как это:
std::find_if(foos.begin(), foos.end(), ???.GetID() == 42);
Я не совсем понимаю, что мне нужно написать вместо ???. Я знаю, что есть _1 с boost :: lambda или arg1 с boost :: phoenix, но после этого я в недоумении.
Edit:
Я попытался следующие, не работает, хотя я видел, как это во многих примерах.
std::find_if(foos.begin(), foos.end(), boost::lambda::bind(&Foo::GetID, boost::lambda::_1) == 42);
Затем я получаю следующее сообщение об ошибке:
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)
почему делает это для себя, когда вы можете использовать C++ 11 standard? –
@David Haim: Я бы хотел;) – gartenriese
'std :: find_if (foos.begin(), foos.end(), (& boost :: phoenix :: placeholders :: _ 1 -> * & Foo :: GetID) () == 42); ' –