<type_traits>

类模板
<type_traits>

std::aligned_union

template <size_t Len, class... Types> struct aligned_union;
对齐联合
获取一个适合用作列表中任何对象类型的存储的POD类型类型,并且大小至少为Len.

获取的类型在成员类型中被别名为aligned_union::type.

请注意,这并非联合类型,而是可以容纳该联合数据的数据类型。

模板参数

Len
存储对象的最小大小(以字节为单位)。
size_t 是一个无符号整数类型。
类型
类型列表。

成员类型

成员类型定义
类型一个POD类型,适合存储列表中任何一种类型的对象,最小大小为类型大小至少为Len.

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// aligned_union example
#include <iostream>
#include <type_traits>

union U {
  int i;
  char c;
  double d;
  U(const char* str) : c(str[0]) {}
};       // non-POD

typedef std::aligned_union<sizeof(U),int,char,double>::type U_pod;

int main() {
  U_pod a,b;              // default-initialized (ok: type is POD)
  new (&a) U ("hello");   // call U's constructor in place
  b = a;                  // assignment (ok: type is POD)
  std::cout << reinterpret_cast<U&>(b).i << std::endl;

  return 0;
}

输出
104


另见