CPP-справочник показывает следующий шаблон функции (среди прочих) из (экспериментальных) диапазонов TS:
template< ranges::InputIterator I, ranges::Sentinel<I> S,
class Proj = ranges::identity,
ranges::IndirectUnaryPredicate<ranges::projected<I, Proj>> Pred >
bool all_of( I first, S last, Pred pred, Proj proj = Proj{} );
Что может параметр шаблона Proj
используется в сочетании с IndirectUnaryPredicate
?
Это проекция. Вы можете использовать его для «проецирования» элементов диапазона перед передачей их в предикат. Это полезно, например, когда вы собираетесь применять предикат для сложного типа данных, такого как std::pair
, давайте хотим применить предикат к std::pair::second
,
all_of(range_of_std_pairs, pred, &pair_t::second);
проверяет диапазон std :: пар, используя предикат pred
на втором элементе пары.
Других решений пока нет …