Compartir a través de


aligned_union (Clase)

Proporciona un tipo POD lo suficientemente grande y convenientemente alineado para almacenar un tipo de unión y el tamaño necesario.

Sintaxis

template <std::size_t Len, class... Types>
struct aligned_union;

template <std::size_t Len, class... Types>
using aligned_union_t = typename aligned_union<Len, Types...>::type;

Parámetros

Len
El valor de alineación para el tipo más grande de la unión.

Tipos
Los distintos tipos de la unión subyacente.

Comentarios

Use la plantilla de clase para obtener la alineación y el tamaño necesarios para almacenar una unión en el almacenamiento sin inicializar. El typedef de miembro type nombra a un tipo POD adecuado para el almacenamiento de cualquier tipo enumerado en Tipos; el tamaño mínimo es Len. El miembro estático alignment_value de tipo std::size_t contiene la alineación más estricta necesaria de todos los tipos enumerados en Tipos.

Ejemplo

En el ejemplo siguiente se muestra cómo usar aligned_union para asignar un búfer de pila alineada para colocar una unión.

// std__type_traits__aligned_union.cpp
#include <iostream>
#include <type_traits>

union U_type
{
    int i;
    float f;
    double d;
    U_type(float e) : f(e) {}
};

typedef std::aligned_union<16, int, float, double>::type aligned_U_type;

int main()
{
    // allocate memory for a U_type aligned on a 16-byte boundary
    aligned_U_type au;
    // do placement new in the aligned memory on the stack
    U_type* u = new (&au) U_type(1.0f);
    if (nullptr != u)
    {
        std::cout << "value of u->i is " << u->i << std::endl;
        // must clean up placement objects manually!
        u->~U_type();
    }
}
value of u->i is 1065353216

Requisitos

Encabezado:<type_traits>

Espacio de nombres: std

Consulte también

<type_traits>
alignment_of (Clase)