将 std::variant 与向量一起使用

问题描述

我正在编写一个使用向量中的变体的程序,但我遇到了一个问题:

E0413   no suitable conversion function from "std::variant<char,short>" to "char" exists

这是我的程序:

int main()
{
   
   std::vector<std::variant<char,short>> vec;
   switch(type)
   {
     case 1200: //char
       char tab[10];
       for(unsigned i = 0; i<6; i++)
           tab[i] = vec.at(i);
     case 1300: //short
       short tab[10];
       for(unsigned i = 0; i<6; i++)
           tab[i] = vec.at(i);
   }
 return 0;
}

我使用 std::variant 是因为需要区分类型。

我该如何解决这个问题?

谢谢

解决方法

       char tab[10];
       for(unsigned i = 0; i<6; i++)
           tab[i] = vec.at(i);

您需要明确指定要采用哪种类型的变体。为此,您可以使用 std::get:

       char tab[10];
       for(unsigned i = 0; i<6; i++)
           tab[i] = std::get<char>(vec.at(i)); // std::get<0>(vec.at(i)) would have the same effect
,

使用 std::get<char>(variant) 而不是隐式转换。