根据所包含的类型检索向量的向量

Retrieve vector of vector according to contained type

本文关键字:向量 类型 检索 包含      更新时间:2023-10-16

我正在制作一个小型3D引擎,我想知道如何避免每次访问灯光,材料等时循环通过我的整个层次结构(模型,灯光)。

我决定创建一个单例DataProvider,保存所有的列表,指向材料的指针列表,或指向灯的指针列表,任何类型的列表。

但是,我的代码看起来太侵入了,每次我必须添加一个新的列表,我必须将它添加到类属性中。

我最终决定这样做:

class DataProvider
{
  public:
    using DataListContainer = std::vector<std::vector<boost::any>>;
    ...
private:
   DataListContainer data_;

我要解决的问题是根据给定的类型获得内部向量?整个过程似乎很混乱。除此之外,使用boost::any类型并不能真正保证内部向量中的类型是唯一的,它可能是混合的。存储向量的向量的合适方法是什么,根据它们存储的类型检索内部向量?

如果我正确理解了你想要什么,你可以使用这样的内容:

template <typename ... Ts>
class DataProviderT
{
public:
    using DataListContainer = std::tuple<std::vector<Ts>...>;
    template <typename T>
    std::vector<T>& GetVector() { return std::get<std::vector<T>>(data_); }
private:
   DataListContainer data_;
};
using DataProvider = DataProviderT<Model, Light>;