close
Espacios de nombres
Variantes

Caché que no se propaga (non-propagating-cache) (C++20)

De cppreference.com
 
 
Biblioteca de rangos
Adaptadores de rangos
 
<tbody> </tbody>
template< class T > requires std::is_object_v<T> class /*non-propagating-cache*/;
(desde C++20)
(solo de exposición*)

Algunos adaptadores de rango como ranges::join_view y ranges::lazy_split_view almacenan condicionalmente un valor (por ejemplo, un iterador) que se especifica en términos de una plantilla de clase de solo exposición non-propagating-cache.

El contenedor se comporta exactamente como std::optional<T>, excepto que:

  • no copia el valor de la fuente cuando se construye con copia o se le asigna,
  • restablece el valor de la fuente cuando se le mueve,
  • restablece su valor cuando se le asigna, y
  • además proporciona una plantilla de función miembro para permitir que una vista de entrada almacene temporalmente en caché los valores a medida que se itera sobre ella.

El contenedor encapsula una caché que contiene un valor. Borrar la caché es una operación equivalente a restablecer un valor contenido. Dicha operación se realiza al copiar o mover un contenedor.

Parámetros de plantilla

T - El tipo del valor contenido; debe ser un tipo objeto.

Funciones miembro

Constructores de copia y movimiento.

<tbody> </tbody>
constexpr /*non-propagating-cache*/ ( const /*non-propagating-cache*/& ) noexcept {}
(1) (desde C++20)
constexpr /*non-propagating-cache*/ ( /*non-propagating-cache*/&& other ) noexcept { other.reset(); }
(2) (desde C++20)
1) El constructor de copia no tiene efecto.
2) El constructor de movimiento borra la memoria caché de other.

Operadores de copia y movimiento

<tbody> </tbody>
constexpr /*non-propagating-cache*/& operator=( const /*non-propagating-cache*/& other ) noexcept { if (std::addressof(other) != this) reset(); return *this; }
(1) (desde C++20)
constexpr /*non-propagating-cache*/& operator=( /*non-propagating-cache*/&& other ) noexcept { reset(); other.reset(); return *this; }
(2) (desde C++20)
1) El operador de asignación de copia borra la caché de *this.
2) El operador de asignación de movimiento borra las cachés de *this y other.

non-propagating-cache<T>::emplace-deref

<tbody> </tbody>
template< class I > constexpr T& /*emplace-deref*/( const I& i );
(desde C++20)
(solo de exposición*)

Inicializa el valor contenido inicializando directamente (pero no con inicialización de lista directa) con *i. Si *this ya contiene un valor antes de la llamada, se llama a reset().

Devuelve una referencia al nuevovalor contenido.

El programa está mal formado a menos que la declaración T t(*i); esté bien formada para alguna variable inventada t. Si *i es un pr-valor de T posiblemente calificado como const volatile, entonces no es necesario que sea movible.

Miembros identicos a std::optional

Funciones miembro

Construye el objeto opcional.
(función miembro pública de std::optional<T>) [editar]
Destruye el valor contenido, si es que lo hay.
(función miembro pública de std::optional<T>) [editar]
Asigna contenido.
(función miembro pública de std::optional<T>) [editar]
Observadores
Accede al valor contenido.
(función miembro pública de std::optional<T>) [editar]
Comprueba si un objeto opcional contiene un valor.
(función miembro pública de std::optional<T>) [editar]
Modificadores
Destruye cualquier valor contenido.
(función miembro pública de std::optional<T>) [editar]
Construye el valor contenido en el sitio.
(función miembro pública de std::optional<T>) [editar]

Notas

non-propagating-cache se utiliza en implementaciones para almacenar en caché el resultado de begin() para proporcionar una complejidad de tiempo constante amortizada del método.

Véase también

Una vista (view) que consiste en la secuencia obtenida al aplanar una vista de rangos (range).
(plantilla de clase) (objeto adaptador de rango) [editar]
Una vista (view) que consiste en la secuencia obtenida al aplanar una vista de rangos, con el delimitador entre elementos.
(plantilla de clase) (objeto adaptador de rango) [editar]
Una vista (view) sobre los subrangos obtenidos al dividir otra vista usando un delimitador.
(plantilla de clase) (objeto adaptador de rango) [editar]
Una vista (view) sobre los subrangos obtenidos al separar otra vista (view) usando un delimitador.
(plantilla de clase) (objeto adaptador de rango) [editar]
Un rango de vistas (view) que son fragmentos sucesivos no superpuestos de tamaño N de los elementos de otra vista.
(plantilla de clase) (objeto adaptador de rango) [editar]