C ++ 2017对std :: vector <std :: variant>

时间:2019-01-02 16:52:50

标签: c++ stdvector std-variant

我尝试存储对由std::vector组成的std::variant的引用。 我可以为const std::variant<T>&的元素创建一个vector,但是我很难存储对整个向量的引用。我想答案与这篇帖子c++ variant class member stored by reference有关,但我无法将其应用于我的情况。

#include <vector>
#include <variant>

using MType = std::variant<int, double>;
int main()
{
      std::vector<int> intVec{ 1,2,3,4 };
      std::vector<double> dlVec{ 1.1,2.2,3.3,4.4 };

      const MType& refVar = intVec[0];
      // const std::vector<MType>& refVec = intVec; // compiler error: not suitable construction 
}

2 个答案:

答案 0 :(得分:4)

您可以将int分配给variant<int, double>,也可以将double分配给variant<int, double>,但是都不是{em {1}}和variant<int, double>不是vector<variant<int, double>>vector<int>

您根本无法做到这一点。

您可能是说vector<double>吗?

答案 1 :(得分:0)

  

我可以为向量的元素创建一个const std::variant&

使用

const MType& refVar = intVec[0];

您没有创建对intVec元素的引用,而是创建了一个临时文件(具有生命周期延长)。

所以基本上是这样:

const std::variant<int, double> var = intVec[0];
  

但是我很难存储对整个向量的引用

std::vector相同,您可以创建一个std::vector<std::variant<int, double>>

std::vector<std::variant<int, double>> varVec(intVec.begin(), intVec.end());