Namespaces
Variants

Caché sin propagación (C++20)

De es.cppreference.net
 
 
Biblioteca de rangos
Adaptadores de rangos
 
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)
1) El constructor de copia no tiene efecto.
2) El constructor de movimiento limpia la caché de other .

Operadores de asignación de copia y movimiento

constexpr /*non-propagating-cache*/ &

operator = ( const /*non-propagating-cache*/ & other ) noexcept
{
if ( std:: addressof ( other ) ! = this )
reset ( ) ;
return * this ;

}
(1) (since C++20)
constexpr /*non-propagating-cache*/ &

operator = ( /*non-propagating-cache*/ && other ) noexcept
{
reset ( ) ;
other. reset ( ) ;
return * this ;

}
(2) (since C++20)
1) El operador de asignación de copia limpia la caché de * this .
2) El operador de asignación de movimiento limpia las cachés tanto de * this como de other .

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

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)
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)
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)