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