以下代码不太有用。
#include <type_traits>
#include <string>
#include <iostream>
template<std::size_t Len, class... Types>
using dataType = typename std::aligned_union<Len,Types...>::type;
int main()
{
dataType<1,int,float,std::string,char,bool> x;
dataType<1,int,float,std::string,char,bool> y;
new (&x) std::string("chicken");
new (&y) std::string("boiled");
std::swap(x,y);
std::cout << *reinterpret_cast<std::string*>(&x) << " " << *reinterpret_cast<std::string*>(&y) << std::endl;
}
例如,它打印chicke boiled
而没有n
。它还没有交换x
和y
,否则会打印boiled chicken
。
答案 0 :(得分:2)
这不可行。交换的正确行为需要知道union包含哪种类型。这不是一个有区别的联合,因此任何依赖于知道联合包含哪种类型的操作都将失败,除非特别提供该信息。
我很想知道你怎么想象这可能会起作用,甚至可以想象。你认为std::swap
可能做什么魔术?