std::scoped_allocator_adaptor
Definido en el archivo de encabezado <scoped_allocator>
|
||
template< class OuterAlloc, class... InnerAlloc > class scoped_allocator_adaptor : public OuterAlloc; |
(desde C++11) | |
La plantilla de clase std::scoped_allocator_adaptor
es un asignador que se puede utilizar con contenedores multinivel (vector de conjuntos de listas de tuplas de mapas, etc.). Se instancia con un tipo de asignador externo OuterAlloc
y cero o más tipos de asignador interno InnerAlloc...
. Un contenedor construido directamente con scoped_allocator_adaptor
usa OuterAlloc
para asignar sus elementos, pero si un elemento es en sí mismo un contenedor, usa el primer asignador interno. Los elementos de ese contenedor, si ellos mismos son contenedores, usan el segundo asignador interno, etc. Si hay más niveles en el contenedor que asignadores internos, el último asignador interno se reutiliza para todos los contenedores anidados posteriores.
El propósito de este adaptador es inicializar correctamente los asignadores con estado en contenedores anidados, como cuando todos los niveles de un contenedor anidado deben colocarse en el mismo segmento de memoria compartida. El constructor del adaptador toma los argumentos de todos los asignadores de la lista y cada contenedor anidado obtiene el estado de su asignador del adaptador según sea necesario.
Para el propósito de scoped_allocator_adaptor
, si el próximo asignador interno es A
, cualquier clase T
para la cual std::uses_allocator<T, A>::value == true participa en la recursividad como si fuera un contenedor. Además, std::pair se trata como tal contenedor por sobrecargas específicas de scoped_allocator_adaptor::construct.
La implementación típica contiene una instancia de std::scoped_allocator_adaptor<InnerAllocs...>
como un objeto miembro.
Contenido |
[editar] Tipos miembro
Tipo | Definición |
outer_allocator_type
|
OuterAlloc |
inner_allocator_type
|
scoped_allocator_adaptor<InnerAllocs...> o, si sizeof...(InnerAllocs) == 0, scoped_allocator_adaptor<OuterAlloc> |
value_type
|
std::allocator_traits<OuterAlloc>::value_type |
size_type
|
std::allocator_traits<OuterAlloc>::size_type |
difference_type
|
std::allocator_traits<OuterAlloc>::difference_type |
pointer
|
std::allocator_traits<OuterAlloc>::pointer |
const_pointer
|
std::allocator_traits<OuterAlloc>::const_pointer |
void_pointer
|
std::allocator_traits<OuterAlloc>::void_pointer |
const_void_pointer
|
std::allocator_traits<OuterAlloc>::const_void_pointer |
propagate_on_container_copy_assignment
| |
propagate_on_container_move_assignment
| |
propagate_on_container_swap
| |
is_always_equal (C++17)
| |
rebind
|
[editar] Funciones miembro
crea una nueva instancia scoped_allocator_adaptor Original: creates a new scoped_allocator_adaptor instance The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (función miembro pública) | |
destructs una instancia scoped_allocator_adaptor Original: destructs a scoped_allocator_adaptor instance The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (función miembro pública) | |
Asigna un scoped_allocator_adaptor . (función miembro pública) | |
obtiene una referencia inner_allocator Original: obtains an inner_allocator referenceThe text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (función miembro pública) | |
obtiene una referencia outer_allocator Original: obtains an outer_allocator referenceThe text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (función miembro pública) | |
asigna almacenamiento sin inicializar utilizando el asignador exterior Original: allocates uninitialized storage using the outer allocator The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (función miembro pública) | |
asigna almacenamiento mediante el asignador exterior Original: allocates storage using the outer allocator The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (función miembro pública) | |
returns the largest allocation size supported by the outer allocator (función miembro pública) | |
construye un objeto de almacenamiento asignado, pasando el asignador interior a su constructor, si procede Original: constructs an object in allocated storage, passing the inner allocator to its constructor if appropriate The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (función miembro pública) | |
desrtucts un objeto de almacenamiento asignado Original: desrtucts an object in allocated storage The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (función miembro pública) | |
Copia el estado de scoped_allocator_adaptor y todos sus asignadores. (función miembro pública) |
[editar] Funciones no miembro
Compara dos instancias de scoped_allocator_adaptor. (función miembro pública) |
[editar] Guías de deducción(desde C++17)
[editar] Ejemplo
#include <vector> #include <scoped_allocator> #include <boost/interprocess/managed_shared_memory.hpp> #include <boost/interprocess/allocators/adaptive_pool.hpp> namespace bi = boost::interprocess; template<class T> using alloc = bi::adaptive_pool<T, bi::managed_shared_memory::segment_manager>; using ipc_row = std::vector<int, alloc<int>>; using ipc_matrix = std::vector<ipc_row, std::scoped_allocator_adaptor<alloc<ipc_row>>>; int main () { bi::managed_shared_memory s(bi::create_only, "Demo", 65536); // crea un vector de vectores en memoria compartida ipc_matrix v(s.get_segment_manager()); // para todas estas adiciones, los vectores internos obtienen sus argumentos asignador // del scoped_allocator_adaptor externo del vector v.resize(1); v[0].push_back(1); v.emplace_back(2); std::vector<int> local_row = {1,2,3}; v.emplace_back(local_row.begin(), local_row.end()); bi::shared_memory_object::remove("Demo"); }
[editar] Véase también
(C++11) |
Proporciona información sobre los tipos de asignadores. (plantilla de clase) |
(C++11) |
Comprueba si el tipo especificado admite construcción con uso de asignador. (plantilla de clase) |
El asignador de memoria por defecto. (plantilla de clase) |