Namespaces
Variants

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

From cppreference.net
C++ named requirements

Объекты замыканий адаптеров диапазонов являются FunctionObject ами , которые могут быть вызваны с помощью оператора pipe: если C является объектом замыкания адаптера диапазона и R является range , то следующие два выражения эквивалентны :

C(R)
R | C

Два объекта замыкания адаптера диапазонов могут быть объединены с помощью operator | для создания другого объекта замыкания адаптера диапазонов: если C и D являются объектами замыкания адаптера диапазонов, тогда C | D создает объект замыкания адаптера диапазонов E со следующими свойствами:

  • E хранит копию C и D , прямое не-списковое инициализирование из std:: forward < decltype ( ( C ) ) > ( C ) и std:: forward < decltype ( ( D ) ) > ( D ) соответственно. Если такая инициализация некорректна, C | D также является некорректной.
  • Пусть c и d являются сохранёнными копиями (с той же константностью и категорией значения, что и E ), а R является объектом range , тогда следующие выражения эквивалентны :
d(c(R))
R | c | d
E(R)
R | E // R | (C | D)

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

Объекты, тип которых совпадает с одним из следующих объектов (игнорируя cv-квалификацию), являются объектами замыкания адаптера диапазона:

  • объекты адаптеров диапазонов унарного типа,
(начиная с C++23)
  • результаты привязки завершающих аргументов объектами адаптеров диапазонов, и
  • результаты цепочки двух объектов замыканий адаптеров диапазонов с помощью operator | .

Смотрите также

вспомогательный базовый класс-шаблон для определения объекта замыкания адаптера диапазона
(шаблон класса)