C++ named requirements: RangeAdaptorObject (since C++20)
Objetos adaptadores de rango
son objetos de punto de personalización que aceptan
viewable_range
como sus primeros argumentos y retornan una
view
. Algunos objetos adaptadores de rango son unarios, es decir, toman un
viewable_range
como su único argumento. Otros objetos adaptadores de rango toman un
viewable_range
y otros argumentos adicionales.
Si un objeto adaptador de rango toma solo un argumento, también es un RangeAdaptorClosureObject .
Si un objeto adaptador de rango toma más de un argumento, también admite aplicación parcial: sea
- a sea un objeto adaptador de rango, y
- args... sean argumentos (generalmente apropiados para argumentos finales),
expresión a ( args... ) tiene las siguientes propiedades:
-
es válido si y solo si para cada argumento
e
en
args...
tal que
Ees decltype ( ( e ) ) , std:: is_constructible_v < std:: decay_t < E > , E > es true , - cuando la llamada es válida, su objeto resultado almacena un subobjeto de tipo std:: decay_t < E > inicializado directo-no-lista con std:: forward < E > ( e ) , para cada argumento e en args... (en otras palabras, los objetos adaptadores de rango enlazan argumentos por valor),
- el objeto resultado es un RangeAdaptorClosureObject ,
- llamar al RangeAdaptorClosureObject reenvía los argumentos enlazados (si los hay) al objeto adaptador de rango asociado. Los argumentos enlazados (si los hay) se consideran con la categoría de valor y calificación cv del RangeAdaptorClosureObject . En otras palabras, a ( args... ) ( r ) es equivalente a std:: bind_back ( a, args... ) ( r ) (pero la primera también soporta la sintaxis de tubería). (desde C++23)
Al igual que otros objetos de punto de personalización, sea
- a sea un objeto de la versión sin calificadores cv del tipo de cualquier objeto adaptador de rango,
- args... sea cualquier grupo de argumentos que satisfaga las restricciones del operator ( ) del tipo de a ,
llamadas a
- a ( args... ) ,
- std:: as_const ( a ) ( args... ) ,
- std :: move ( a ) ( args... ) , y
- std :: move ( std:: as_const ( a ) ) ( args... )
son todos equivalentes.
El objeto resultante de cada una de estas expresiones es un
view
o un
RangeAdaptorClosureObject
.
Notas
operator ( ) no es compatible con versiones calificadas como volátiles o const-volátiles de tipos de objetos adaptadores de rango. Los arrays y las funciones se convierten en punteros durante el enlace.