根据包含的类型检索矢量矢量

时间:2016-06-24 19:13:55

标签: c++ templates boost

我正在研究一个小型3D引擎,我想知道如何避免每次循环访问整个层次结构(模型,灯光)以访问灯光,材料等...

我决定创建一个单独的DataProvider,保留所有列表,指向材质的指针列表或指向灯光的指针列表,任何类型列表。

但是,我的代码看起来过于干扰,每次我必须添加一个新列表时,我必须将它添加到类属性中。

我终于决定做点什么:

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

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

1 个答案:

答案 0 :(得分:3)

如果我理解你想要的东西,你可以使用类似的东西:

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>;