Идиоматический C ++ для remove_if

У меня есть этот класс

class Point2D
{
public:
 bool isValid();
 // ...
private:
 double x_, y_;
};

У меня есть std :: vector < Point2D> и я хотел бы удалить недопустимые точки, теперь мне нравится это:

bool invalid ( const Point2D& p )
{
 return !p.isValid();
}

void f()
{
 std::vector< Point2D > points;
 // fill points
 points.erase( std::remove_if( points.begin(), points.end(), invalid ), points.end() );
 // use valid points
}

Есть ли стандартный способ сделать это (красиво), например, без необходимости «дублировать» функциональность класса метод Point2D :: isValid ?

Может быть, использовать лямбда-выражение C ++ 11 (я не очень знаком с лямбда-выражением)?

10
задан Xeo 12 January 2012 в 20:22
поделиться