C ++ 2017 Ссылка на std :: vector - PullRequest
       15

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

0 голосов
/ 02 января 2019

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

0 голосов
/ 02 января 2019

Я могу создать 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());
0 голосов
/ 02 января 2019

Вы можете назначить int для variant<int, double>, и вы можете назначить double для variant<int, double>, но ни не является a variant<int, double>, а vector<variant<int, double>> не является vector<int> или vector<double>.

Вы просто не можете этого сделать.

Возможно ли, что вы имели в виду variant<vector<int>, vector<double>>?

...