Aracılığıyla paylaş


aligned_union Sınıfı

Birleşim türünü ve gereken boyutu depolamak için yeterince büyük ve uygun şekilde hizalanmış bir POD türü sağlar.

Sözdizimi

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;

Parametreler

Len
Birleşimdeki en büyük türün hizalama değeri.

Türler
Temel alınan birleşimdeki ayrı türler.

Açıklamalar

Bir birleşimi başlatılmamış depolamada depolamak için gereken hizalamayı ve boyutu almak için sınıf şablonunu kullanın. Üye tür tanımıtype, Türler'de listelenen herhangi bir türde depolama için uygun bir POD türünü adlandırın; en küçük boyut Uzunluk'tır. Türün std::size_t statik üyesialignment_value, Türler'de listelenen tüm türler için gereken en katı hizalamayı içerir.

Örnek

Aşağıdaki örnekte birleşim yerleştirmek için hizalanmış bir yığın arabelleği ayırmak için nasıl kullanılacağı aligned_union gösterilmektedir.

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

Gereksinimler

Üst Bilgi:<type_traits>

Ad alanı: std

Ayrıca bkz.

<type_traits>
alignment_of Sınıfı