Именованные требования C++: RangeAdaptorClosureObject (начиная с C++20)
Объекты-замыкания адаптеров диапазонов — это функциональные объекты, вызываемые с помощью оператора конвейера: если 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|.
См. также
|
(C++23) | вспомогательный шаблон базового класса для определения объекта-замыкания адаптера диапазона (шаблон класса) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/named_req/RangeAdaptorClosureObject