std:: uses_allocator
|
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
Tno utiliza un asignador compatible ( std :: uses_allocator_v < T, Alloc > es false ), entoncesallocse ignora. - De lo contrario, std :: uses_allocator_v < T, Alloc > es true , y
-
-
si
Tutiliza 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
Tutiliza 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).
-
si
-
Como caso especial,
std::pair
se trata como un tipo uses-allocator aunque
std::uses_allocatorsea false para pares (a diferencia de, por ejemplo, std::tuple ): consulte las sobrecargas específicas para pares de std::pmr::polymorphic_allocator::construct y std::scoped_allocator_adaptor::construct (until C++20) std::uses_allocator_construction_args (since C++20) .
|
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:
-
Ttiene un constructor que toma std::allocator_arg_t como primer argumento, yAlloccomo segundo argumento. -
Ttiene un constructor que tomaAlloccomo ú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:
|
(C++11)
|
especializa el rasgo de tipo
std::uses_allocator
(especialización de plantilla de clase) |
|
(C++11)
|
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) |
|
|
(C++11)
|
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) |
|
|
(C++11)
(hasta C++17)
|
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) |
|
|
(C++11)
(hasta C++17)
|
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
|
(C++11)
|
una etiqueta utilizada para seleccionar constructores conscientes del asignador
(etiqueta) |
|
(C++20)
|
prepara la lista de argumentos que coincide con la variante de construcción uses-allocator requerida por el tipo dado
(plantilla de función) |
|
(C++20)
|
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) |
|
|
(C++11)
|
implementa un asignador multinivel para contenedores multinivel
(plantilla de clase) |