Partager via


aligned_union, classe

Fournit un type POD suffisamment grand et convenablement aligné pour stocker un type union et la taille nécessaire.

Syntaxe

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;

Paramètres

Len
Valeur d'alignement pour le plus grand type dans l'union.

Types
Types distincts dans l'union sous-jacente.

Notes

Utilisez le modèle de classe pour obtenir l’alignement et la taille nécessaires pour stocker une union dans un stockage non initialisé. Le typedef type de membre nomme un type POD adapté au stockage de n’importe quel type répertorié dans types ; la taille minimale est Len. Le membre alignment_value statique du type std::size_t contient l’alignement le plus strict requis de tous les types répertoriés dans Types.

Exemple

L’exemple suivant montre comment utiliser aligned_union pour allouer une mémoire tampon de pile alignée afin de placer une union.

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

Spécifications

Header :<type_traits>

Espace de noms : std

Voir aussi

<type_traits>
alignment_of, classe