Udostępnij za pośrednictwem


aligned_union — klasa

Zapewnia wystarczająco duży i odpowiednio dopasowany typ zasobnika do przechowywania typu unii oraz wymagany rozmiar.

Składnia

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;

Parametry

Len
Wartość wyrównania dla największego typu w unii.

Typy
Różne typy w unii bazowej.

Uwagi

Użyj szablonu klasy, aby uzyskać wyrównanie i rozmiar wymagany do przechowywania unii w niezainicjowanym magazynie. Typ elementu członkowskiego type określa typ zasobnika odpowiedni do przechowywania dowolnego typu wymienionego w typach; minimalny rozmiar to Len. Statyczny element członkowski alignment_value typu std::size_t zawiera najostrzejsze wyrównanie wszystkich typów wymienionych w artykule Typy.

Przykład

W poniższym przykładzie pokazano, jak przydzielić aligned_union wyrównany bufor stosu, aby umieścić unię.

// 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

Wymagania

Nagłówek:<type_traits>

Przestrzeń nazw: std

Zobacz też

<type_traits>
alignment_of, klasa