Я обычно использую вложенные классы для встраивания объектов поиска (для использования с std::find_if
) в мои конкретные типы.
Что-то вроде:
// Dummy example
class Foo
{
public:
class finder
{
public:
finder(int value) : m_value(value) {};
bool operator()(const Foo& foo) { return (foo.m_int_value == value); }
private:
int m_value;
};
private:
int m_int_value;
friend class finder;
};
Тогда:
vector<Foo> foo_list;
vector<Foo>::iterator foo =
std::find_if(foo_list.begin(), foo_list.end(), Foo::finder(4));
Конечно, это можно сделать без использования вложенных классов. Но я нахожу это довольно элегантным, потому что искатель не имеет смысла вне определения класса:
Если я когда-либо удаляю класс в случае рефакторинга кода, также должен быть удален искатель.