C++2017 参考 std::vector<std::variant>

C++2017 Reference to std::vector<std::variant>

本文关键字:std gt variant vector 参考 C++2017 lt      更新时间:2023-10-16

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

#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 
}
你可以

int分配给variant<int, double>,也可以为variant<int, double>分配double,但两者都不是variant<int, double>vector<variant<int, double>>也不是vector<int>vector<double>

你根本做不到。

你有没有可能variant<vector<int>, vector<double>>

我可以创建对向量元素的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());