我尝试存储对由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
}
答案 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());