Я бы хотел сделать вектор векторов разных типов.Предположим, у меня есть 4 класса;Собака, Кот, Свинья, Корова.Мне бы хотелось, чтобы вектор содержал векторы каждого из них, и чтобы я мог получить к ним доступ по двум индексам, чтобы я мог выполнять итерации по ним, что было бы в случае, если бы это был вектор векторов.
У меня естьиграл с такими вещами, как:
std::vector<std::variant<std::vector<Dog>,
std::vector<Cat>,
std::vector<Pig>,
std::vector<Cow>>>;
Кроме того, я хотел бы иметь возможность создавать эти массивы с помощью вариабельной шаблонной конструкции, чтобы я мог легко создать еще один вектор векторов, скажем, Apple, Pear, Orange, Lemon, Grape, Cherry.
Я хотел бы иметь возможность написать в своем коде что-то вроде:
MyVectorOfVectors<Dog,Cat,Pig,Cow> animals;
MyVectorOfVectors<Apple, Pear, Orange, Lemon, Grape, Cherry> fruits;
и иметь такие, которые создают векторы для каждого типа и хранят эти векторыв другом векторе (или аналогичном), к которому я могу получить доступ по индексу.Очевидно, этот вектор должен быть своего рода гетерогенным контейнером, как предложено выше, с вектором вариантов.Я полагаю, что это должно быть заключено в какое-то определение класса вариационного шаблона.
Так что для доступа к третьему Dog в массиве потребуется функциональность, подобная этой:
Dog mydog = animals[0][3];
илиесли решение нужно было обернуть в класс,
Dog mydog = animals.thearray[0][3];
Я понимаю, что это можно реализовать с помощью иерархии классов, динамического размещения и указателей на объекты, но я ищу решение с плоскимМодель памяти для исполнения.