Для чего предназначен параметр шаблона класса Proj и шаблон класса IndirectUnaryPredicate в диапазонах TS?
Cpp-reference показывает следующий шаблон функции (среди прочих) из (экспериментального) диапазона 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
?
1 ответ
Решение
Это проекция. Вы можете использовать его для "проецирования" элементов диапазона перед передачей их в предикат. Это полезно, например, когда вы собираетесь применять предикат для сложного типа данных, такого как std::pair
, давайте хотим применить предикат к std::pair::second
,
all_of(range_of_std_pairs, pred, &pair_t::second);
проверяет диапазон std:: пар, используя предикат pred
на втором элементе пары.