Namespaces
Variants

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

From cppreference.net
C++ named requirements

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 E es 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

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.