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