首页 > 解决方案 > 如何添加到 std::variants?

问题描述

所以我有:

typedef std::variant<int,float,std::string> VarType;

我希望能够做到:

VarType a = 1;
VarType b = 1;
VarType c = a + b;

当类型混合时,它抛出它很酷。

标签: c++c++17variant

解决方案


VarType c = std::get<int>(a) + std::get<int>(b);

更一般的:

VarType c = std::visit([](auto x, auto y) -> VarType 
                       { 
                           if constexpr(!std::is_same_v<decltype(x), decltype(y)>)
                           {
                               throw;
                           }
                           else
                           {
                               return x + y; 
                           }
                       }, a, b);

wandbox.org 上的实时示例


推荐阅读