Caché que no se propaga (non-propagating-cache) (C++20)
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) |
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) |
*this.*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.
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
(C++20) |
Una vista (view) que consiste en la secuencia obtenida al aplanar una vista de rangos (range). (plantilla de clase) (objeto adaptador de rango) |
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) | |
Una vista (view) sobre los subrangos obtenidos al dividir otra vista usando un delimitador. (plantilla de clase) (objeto adaptador de rango) | |
Una vista (view) sobre los subrangos obtenidos al separar otra vista (view) usando un delimitador. (plantilla de clase) (objeto adaptador de rango) | |
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) |