对于std::variant的二次封装
在 C++17 中,std::variant
提供了一种安全的方式来存储多个可能的类型,它类似于 union
,且支持类型安全的操作。此处介绍对std::variant
的二次封装,实现智能的赋值与访问。
SmartVariant的代码实现
1 |
|
① 允许直接传递 std::variant
进行初始化
SmartVariant(std::variant<Ts...> var)
允许 SmartVariant
直接用 std::variant<Ts...>
进行初始化。例如:
1 | std::variant<int, double, std::string> v = 42; |
此构造函数保证 SmartVariant
可以兼容 std::variant<Ts...>
,而不会因为模板构造函数 SmartVariant(T value)
误匹配 std::variant<Ts...>
而导致编译错误。
② 允许使用单个值初始化
此模板构造函数允许 SmartVariant
直接接受 Ts...
之一的值,不需要显式地创建 std::variant<Ts...>
,SmartVariant
会自动处理赋值。例如:
1 | SmartVariant<int, double, std::string> sv = 42; // 存储 int |
使用示范
1 | int main() { |
运行结果:
1 | x: 42 |