Я пытаюсь сохранить ссылку на std::vector
состоящий из std::variant
,
Я могу создать const std::variant<T>&
к элементу 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
}
Вы можете назначить int
к variant<int, double>
и вы можете назначить double
к variant<int, 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());