Вы можете подумать, что полезны только указатели на функции-члены. То есть что-то вроде:
struct Widget {
bool valid() const;
};
std::vector<Widget> widgets;
bool all_valid = std::ranges::all_of(widgets, &Widget::valid);
Это будет std::invoke
указатель на функцию-член &Widget::valid
на каждом из Widget
s. Но вы могли бы так же легко сконструировать Widget
, чтобы valid
был просто флагом, а не функцией-членом. И проверка того, что все Widget
являются valid
, является такой же разумной вещью:
struct Widget {
bool valid;
};
std::vector<Widget> widgets;
bool all_valid = std::ranges::all_of(widgets, &Widget::valid);
Единственное отличие состоит в том, что этот std::invoke
указатель на член данные вместо указателя на член функция . Но все же полезно.