Non-propagating cache (C++20)
|
template
<
class
T
>
requires
std::
is_object_v
<
T
>
|
(desde C++20)
( solo para 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 solo para exposición
non-propagating-cache
.
El contenedor se comporta exactamente como std:: optional < T > , excepto que:
- no copia el valor del origen cuando se construye por copia o se asigna,
- restablece el valor del origen cuando se mueve desde él,
- restablece su valor cuando se asigna desde otro, y
- además proporciona una plantilla de función miembro para permitir que una vista de entrada almacene temporalmente valores en caché mientras se itera sobre ella.
El contenedor encapsula una caché que contiene un valor. Limpiar la caché es una operación equivalente a reiniciar un valor contenido. Dicha operación se realiza al copiar o mover un contenedor.
Contenidos |
Parámetros de plantilla
| T | - | el tipo del valor contenido, debe ser un tipo objeto |
Funciones miembro
Constructores de copia y movimiento
|
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) |
Operadores de asignación de copia y movimiento
|
constexpr
/*non-propagating-cache*/
&
operator
=
(
const
/*non-propagating-cache*/
&
other
)
noexcept
|
(1) | (since C++20) |
|
constexpr
/*non-propagating-cache*/
&
operator
=
(
/*non-propagating-cache*/
&&
other
)
noexcept
|
(2) | (since C++20) |
non-propagating-cache
<T>::
emplace-deref
|
template
<
class
I
>
constexpr T & /*emplace-deref*/ ( const I & i ) ; |
(desde C++20)
( solo para exposición* ) |
|
Inicializa el valor contenido mediante inicialización directa (pero no inicialización directa de lista) con * i . Si * this ya contiene un valor antes de la llamada, reset ( ) es llamado.
Retorna una referencia al nuevo valor 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 prvalue de
T
posiblemente calificado cv, entonces no se requiere que sea movible.
Miembros idénticos a std:: optional
Funciones miembro
construye el objeto
optional
(función miembro pública de
std::optional<T>
)
|
|
|
destruye el valor contenido, si existe
(función miembro pública de
std::optional<T>
)
|
|
|
asigna contenido
(función miembro pública de
std::optional<T>
)
|
|
Observadores |
|
|
accede al valor contenido
(función miembro pública de
std::optional<T>
)
|
|
|
comprueba si el objeto contiene un valor
(función miembro pública de
std::optional<T>
)
|
|
Modificadores |
|
|
destruye cualquier valor contenido
(función miembro pública de
std::optional<T>
)
|
|
|
construye el valor contenido in-situ
(función miembro pública de
std::optional<T>
)
|
|
Notas
non-propagating-cache
se utiliza en implementaciones para almacenar en caché el resultado de
begin
(
)
para proporcionar una complejidad temporal amortizada constante del método.
Véase también
|
(C++20)
|
una
view
que consiste en la secuencia obtenida al aplanar una
view
de
range
s
(plantilla de clase) (objeto adaptador de rango) |
una
view
que consiste en la secuencia obtenida al aplanar una view de ranges, con el delimitador entre elementos
(plantilla de clase) (objeto adaptador de rango) |
|
|
(C++20)
|
una
view
sobre los subrangos obtenidos al dividir otra
view
usando un delimitador
(plantilla de clase) (objeto adaptador de rango) |
una
view
sobre los subrangos obtenidos al dividir otra
view
usando un delimitador
(plantilla de clase) (objeto adaptador de rango) |
|
|
(C++23)
|
un rango de
view
s
que son fragmentos sucesivos no superpuestos de tamaño
N
de los elementos de otra
view
(plantilla de clase) (objeto adaptador de rango) |