std::uses_allocator
| Definido en el archivo de encabezado <memory>
|
||
template< class T, class Alloc > struct uses_allocator; |
(desde C++11) | |
Si T miembro typedef allocator_type que es convertible de Alloc o es un alias de std::experimental::erased_type (fundamentos de la biblioteca TS), la constante miembro value es true. De lo contrario value es false.
Plantilla de variable axuiliar
<tbody> </tbody> template< class T, class Alloc > inline constexpr bool uses_allocator_v = uses_allocator<T, Alloc>::value; |
(desde C++17) | |
Heredado de std::integral_constant
Constantes miembro
value [estático] |
true si T usa el asignador Alloc., de lo contrario false. (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 uso de asignador
Hay tres convenciones para pasar un asignador alloc a un constructor de algún tipo T:
- si
Tno usa un asignador compatible (std::uses_allocator_v<T, Alloc> esfalse), entonces se ignoraalloc. - de lo contrario, std::uses_allocator_v<T, Alloc> es
true, y
- si
Tusa la convención de asignador anterior (es invocable comoT(std::allocator_arg, alloc, args...)), entonces la construcción con uso de asignador usa esta forma - si
Tusa la convención de asignador posterior (es invocable comoT(args..., alloc)), entonces la construcción con uso de asignador usa 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 un caso especial, std::pair se trata como un tipo que usa asignador incluso cuando
std::uses_allocatoresfalsepara pares (a diferencia de std::tuple): véanse las sobrecargas específicas para pares de std::pmr::polymorphic_allocator::construct y std::scoped_allocator_adaptor::construct (hasta C++20)std::uses_allocator_construction_args (desde C++20).
|
Las funciones de utilería std::make_obj_using_allocator y std::uninitialized_construct_using_allocator pueden usarse para crear explícitamente un objeto siguiendo el protocolo anterior, y std::uses_allocator_construction_args puede usarse para preparar la lista de argumentos que coincida con el estilo de construcción con uso de asignador esperado por el tipo. |
(desde C++20) |
Especializaciones
Las especializaciones personalizadas del rasgo de tipo std::uses_allocator están permitidas para tipos que no tienen el miembro typedef allocator_type pero cumplen uno de los dos requisitos siguientes:
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.Arriba, Alloc es un tipo que satisface Allocator o es un tipo puntero convertible a std::experimental::pmr::memory_resource* (fundamentos de la biblioteca TS).
La biblioteca estándar ya proporciona las siguientes especializaciones:
| Especializa el rasgo de tipo std::uses_allocator. (especialización de plantilla de clase) | |
| Especializa el rasgo de tipo std::uses_allocator. (plantilla de función) | |
| Especializa el rasgo de tipo std::uses_allocator. (plantilla de función) | |
| Especializa el rasgo de tipo std::uses_allocator. (plantilla de función) | |
(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) | |
| Especializa al rasgo de tipo std::uses_allocator (especialización de plantilla de clase) |
Notas
Este rasgo de tipo se utiliza por std::tuple, std::scoped_allocator_adaptor, y std::pmr::polymorphic_allocator. También puede ser utilizado por asignadores personalizados o tipos envoltorio para determinar si el objeto o miembro que se está construyendo es capaz de usar un asignador (por ejemplo, es un contenedor), en cuyo caso se debe pasar un asignador a su constructor.
Véase también
(C++11) |
Un objeto de tipo std::allocator_arg_t utilizado para seleccionar constructores conscientes de asignador. (constante) |
(C++11) |
Tipo de etiqueta utilizado para seleccionar sobrecargas de constructores conscientes de asignador. (clase) |
| Prepara la lista de argumentos que coincide con el tipo de construcción con uso de asignador requerida por el tipo dado. (plantilla de función) | |
(C++20) |
Crea un objeto del tipo dado mediante la construcción con uso de asignador. (plantilla de función) |
| Crea un objeto del tipo dado en la ubicación de memoria especificada por medio de la construcción con uso de asignador. (plantilla de función) | |
(C++11) |
Implementa un asignador multinivel para contenedores multinivel. (plantilla de clase) |