Share via


aligned_union-Klasse

Stellt einen POD-Typ bereit, der groß genug ist und passend ausgerichtet ist, um einen Union-Typ zu speichern. Außerdem bietet er die benötigte Größe.

Syntax

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;

Parameter

Len
Der Ausrichtungswert für den größten Typ in der Union.

Typen
Die unterschiedlichen Typen in der zugrunde liegenden Union.

Hinweise

Verwenden Sie die Klassenvorlage, um die Ausrichtung und Größe abzurufen, die zum Speichern einer Union im nicht initialisierten Speicher erforderlich ist. Der Member typedef type benennt einen POD-Typ, der für die Speicherung eines beliebigen Typs geeignet ist, der in "Typen" aufgeführt ist; die Mindestgröße ist Len. Das statische Element alignment_value des Typs std::size_t enthält die strengste Ausrichtung, die für alle in "Typen" aufgeführten Typen erforderlich ist.

Beispiel

Folgendes Beispiel veranschaulicht den Gebrauch von aligned_union, um einen ausgerichteten Stapelpuffer zuzuweisen, um eine Union zu platzieren.

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

Anforderungen

Header:<type_traits>

Namespace: std

Siehe auch

<type_traits>
alignment_of-Klasse