C++2017 Ссылка на std::vector<std:: option>

Я пытаюсь сохранить ссылку на 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 
}

2 ответа

Вы можете назначить 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());
Другие вопросы по тегам