是否可以实现类似下面的效果
DifferentTypesInOne<string, int, double> variant_obj;
variant_obj
中有 string、int 和 double 类型的变量。
我知道这类似于 boost::variant
。我之前搜索过有关它的问题,但我无法偶然发现可以解释该类如何使用可变参数模板来存储所有类型元素的解释。特别是我问我如何定义一个 struct
,它具有所有给定类型的变量和一个成员变量,表示当前哪个是重要的。
谢谢!
最佳答案
大致上,
template<class... Ts>
struct variant_storage {};
template<class T, class... Ts>
struct variant_storage<T, Ts...>{
union {
T head;
variant_storage<Ts...> tail;
};
};
template<class... Ts>
struct variant {
int index;
variant_storage<Ts...> storage;
};
如果你不需要constexpr
-ness,你可以存储一个std::aligned_union_t<0, Ts...>
作为存储,使用placement new,更简单。
关于c++ - 可变模板化结构/boost::variant 是如何实现的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36211708/