-1

我尝试存储对std::vector包含的引用std::variant。我可以const std::variant<T>&为 a 的元素创建 a vector,但我很难存储对整个向量的引用。我想答案与通过引用存储的这个帖子 c++ 变体类成员有关,但我无法将其应用于我的情况。

#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 
}
4

2 回答 2

4

您可以将 an 分配int给 a variant<int, double>,也可以将 a 分配double给 a variant<int, double>,但a和 a都不a或 a 。variant<int, double>vector<variant<int, double>>vector<int>vector<double>

你根本无法做到这一点。

你的意思有可能variant<vector<int>, vector<double>>吗?

于 2019-01-02T17:01:00.367 回答
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());
于 2019-01-02T18:50:12.373 回答