【发布时间】:2018-10-08 15:22:54
【问题描述】:
我想制作一个包含不同类型向量的向量。假设我有 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];
我意识到这可以使用类层次结构、动态分配和指向对象的指针来实现,但我正在寻找一种具有平面内存模型的解决方案以提高性能。
【问题讨论】:
标签: c++ templates vector c++17