Caché sin propagación (C++20)
template< class T >
requires std::is_object_v<T>
class /*non-propagating-cache*/;
|
(desde C++20) (solo exposición*) |
|
Algunos adaptadores de rango como ranges::join_view y ranges::lazy_split_view almacenan condicionalmente un valor (p. ej., un iterador) que se especifica en términos de una plantilla de clase solo de exposición non-propagating-cache.
El envoltorio se comporta exactamente como std::optional<T>, excepto que:
- no copia el valor de la fuente cuando se copia construye o se asigna,
- restablece el valor de la fuente cuando se mueve desde ella,
- 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é valores a medida que se itera sobre ella.
El envoltorio encapsula una caché que contiene un valor. Limpiar la caché es una operación equivalente a restablecer un valor contenido. Dicha operación se realiza al copiar o mover un envoltorio.
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) |