如何添加到std :: variants?

时间:2018-06-26 09:44:56

标签: c++ c++17 variant

所以我有

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

我希望能够做到:

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

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

1 个答案:

答案 0 :(得分:4)

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);

live example on wandbox.org