Namespaces
Variants

std:: uses_allocator

From cppreference.net
Memory management library
( exposition only* )
Allocators
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Memory resources
Uninitialized storage (until C++20)
( until C++20* )
( until C++20* )
( until C++20* )

Garbage collector support (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
Definido en el encabezado <memory>
template < class T, class Alloc >
struct uses_allocator ;
(desde C++11)

Si T tiene un tipo anidado allocator_type que es convertible desde Alloc , la constante miembro value es true . De lo contrario value es false .

Contenidos

Plantilla de variable auxiliar

template < class T, class Alloc >
constexpr bool uses_allocator_v = uses_allocator < T, Alloc > :: value ;
(desde C++17)

Heredado de std:: integral_constant

Constantes miembro

value
[static]
true si T usa el asignador Alloc , false en caso contrario
(constante miembro pública estática)

Funciones miembro

operator bool
convierte el objeto a bool , devuelve value
(función miembro pública)
operator()
(C++14)
devuelve value
(función miembro pública)

Tipos miembro

Tipo Definición
value_type bool
type std:: integral_constant < bool , value >

Construcción con asignador de memoria

Existen tres convenciones para pasar un asignador alloc a un constructor de algún tipo T :

  • Si T no utiliza un asignador compatible ( std :: uses_allocator_v < T, Alloc > es false ), entonces alloc se ignora.
  • De lo contrario, std :: uses_allocator_v < T, Alloc > es true , y
  • si T utiliza la convención de asignador inicial (es invocable como T ( std:: allocator_arg , alloc, args... ) ), entonces la construcción con asignador utiliza esta forma.
  • si T utiliza la convención de asignador final (es invocable como T ( args..., alloc ) ), entonces la construcción con asignador utiliza esta forma.
  • De lo contrario, el programa está mal formado (esto significa que std :: uses_allocator_v < T, Alloc > es true , pero el tipo no sigue ninguna de las dos convenciones permitidas).

Las funciones de utilidad std::make_obj_using_allocator , y std::uninitialized_construct_using_allocator pueden utilizarse para crear explícitamente un objeto siguiendo el protocolo anterior, y std::uses_allocator_construction_args puede utilizarse para preparar la lista de argumentos que coincida con la variante de construcción uses-allocator esperada por el tipo.

(desde C++20)

Especializaciones

Dado un tipo definido por el programa T que no tiene un allocator_type anidado, un programa puede especializar std::uses_allocator para derivar de std::true_type para T si se cumple cualquiera de los siguientes requisitos:

  • T tiene un constructor que toma std::allocator_arg_t como primer argumento, y Alloc como segundo argumento.
  • T tiene un constructor que toma Alloc como último argumento.

En lo anterior, Alloc es un tipo que satisface Allocator o es un tipo puntero convertible a std::experimental::pmr::memory_resource* (library fundamentals TS) .

Las siguientes especializaciones ya están proporcionadas por la biblioteca estándar:

especializa el rasgo de tipo std::uses_allocator
(especialización de plantilla de clase)
especializa el rasgo de tipo std::uses_allocator
(especialización de plantilla de clase)
especializa el rasgo de tipo std::uses_allocator
(especialización de plantilla de clase)
especializa el rasgo de tipo std::uses_allocator
(especialización de plantilla de clase)
especializa el rasgo de tipo std::uses_allocator
(especialización de plantilla de clase)
especializa el rasgo de tipo std::uses_allocator
(especialización de plantilla de clase)
especializa el rasgo de tipo std::uses_allocator
(especialización de plantilla de clase)
especializa el rasgo de tipo std::uses_allocator
(especialización de plantilla de clase)
especializa el rasgo de tipo std::uses_allocator
(especialización de plantilla de clase)
especializa el rasgo de tipo std::uses_allocator
(especialización de plantilla de clase)
especializa el rasgo de tipo std::uses_allocator
(especialización de plantilla de clase)

Notas

Este rasgo de tipo es utilizado por std::tuple , std::scoped_allocator_adaptor , y std::pmr::polymorphic_allocator . También puede ser utilizado por asignadores personalizados o tipos contenedores para determinar si el objeto o miembro que se está construyendo es capaz de utilizar un asignador (por ejemplo, es un contenedor), en cuyo caso se debe pasar un asignador a su constructor.

Véase también

una etiqueta utilizada para seleccionar constructores conscientes del asignador
(etiqueta)
prepara la lista de argumentos que coincide con la variante de construcción uses-allocator requerida por el tipo dado
(plantilla de función)
crea un objeto del tipo dado mediante construcción uses-allocator
(plantilla de función)
crea un objeto del tipo dado en una ubicación de memoria específica mediante construcción uses-allocator
(plantilla de función)
implementa un asignador multinivel para contenedores multinivel
(plantilla de clase)