Namespaces
Variants

C++ named requirements: RangeAdaptorObject (since C++20)

From cppreference.net
C++ named requirements

Объекты адаптеров диапазонов — это объекты точек настройки, которые принимают viewable_range в качестве первого аргумента и возвращают view . Некоторые объекты адаптеров диапазонов являются унарными, то есть они принимают один viewable_range в качестве единственного аргумента. Другие объекты адаптеров диапазонов принимают viewable_range и другие дополнительные аргументы.

Если объект адаптера диапазона принимает только один аргумент, он также является RangeAdaptorClosureObject .

Если объект адаптера диапазона принимает более одного аргумента, он также поддерживает частичное применение: пусть

  • a является таким объектом адаптера диапазона, и
  • args... являются аргументами (обычно подходящими для завершающих аргументов),

выражение a ( args... ) обладает следующими свойствами:

  • оно действительно тогда и только тогда, когда для каждого аргумента e в args... такого, что E является decltype ( ( e ) ) , std:: is_constructible_v < std:: decay_t < E > , E > равно true ,
  • когда вызов действителен, его результирующий объект хранит подобъект типа std:: decay_t < E > прямое-не-списковое-инициализированное с помощью std:: forward < E > ( e ) , для каждого аргумента e в args... (другими словами, объекты адаптеров диапазонов связывают аргументы по значению),
  • результирующий объект является RangeAdaptorClosureObject ,
  • вызов RangeAdaptorClosureObject перенаправляет связанные аргументы (если есть) связанному объекту адаптера диапазона. Связанные аргументы (если есть) считаются имеющими категорию значения и cv-квалификацию RangeAdaptorClosureObject . Другими словами, a ( args... ) ( r ) эквивалентно std:: bind_back ( a, args... ) ( r ) (но первая также поддерживает синтаксис конвейера). (начиная с C++23)

Как и другие объекты точек настройки, пусть

  • a является объектом версии типа без cv-квалификаторов любого объекта адаптера диапазона,
  • args... представляет любую группу аргументов, удовлетворяющую ограничениям operator ( ) типа a ,

вызовы

все эквивалентны.

Результирующий объект каждого из этих выражений является либо объектом view , либо RangeAdaptorClosureObject .

Примечания

operator ( ) не поддерживается для версий объектов адаптеров диапазонов с квалификаторами volatile или const-volatile. Массивы и функции преобразуются в указатели при связывании.