Espacios de nombres
Variantes
Acciones

Requisitos denominados de C++: RangeAdaptorObject (desde C++20)

De cppreference.com
< cpp‎ | named req
 
 
Requisitos denominados de C++
Números aleatorios
Concurrencia
(C++11)
(C++11)
Rangos
Vista multidimensional
Otros

 

Los objetos adaptadores de rango son objetos de punto de personalización que aceptan un rango visible (viewable_range) como primer argumento y devuelven una vista (view). Algunos objetos adaptadores de rango son unarios, es decir, toman un rango visible como su único argumento. Otros objetos adaptadores de rango toman un rango visible y otros argumentos al final.

Si un objeto adaptador de rango toma solo un argumento, también es un objeto cierre adaptador de rango.

Si un objeto adaptador de rango toma más de un argumento, también admite la aplicación parcial: sea

  • a tal objeto adaptador de rango, y
  • args... sean argumentos (generalmente adecuados como argumentos al final),

la expresión a(args...) tiene las siguientes propiedades:

  • es válida 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 directamente sin usar inicialización de lista con std::forward<E>(e), para cada argumento e en args... (en otras palabras, los objetos adaptadores de rango vinculan los argumentos por valor),
  • el objeto resultado es un objeto cierre adaptador de rango.
  • llamar al objeto cierre adaptador de rango reenvía los argumentos vinculados (si los hay) al objeto adaptador de rango asociado. Los argumentos vinculados (si los hay) se consideran que tienen la categoría de valor y la calificación const volatile del objeto cierre adaptador de rango. En otras palabras, a(args...)(r) es equivalente a std::bind_back(a, args...)(r) (pero el primero también admite la sintaxis de tubería). (desde C++23)

Al igual que otros objetos de puntos de personalización, sea

  • a un objeto de la versión no calificada-const volatile del tipo de cualquier objeto adaptador de rango,
  • args... cualquier grupo de argumentos que satisfaga las restricciones del operador operator() del tipo de a,

las llamadas a

son todas equivalentes.

El objeto resultado de cada una de estas expresiones es o bien un objeto vista (view) o un objeto cierre adaptador de rango.

[editar] Notas

El operador operator() no se admite para la versión calificada volatile o para la versión calificada const volatile de los tipos adaptadores de rango. Los arrays y funciones se convierten a punteros al vincularse.