我正在研究一个小型3D引擎,我想知道如何避免每次循环访问整个层次结构(模型,灯光)以访问灯光,材料等...
我决定创建一个单独的DataProvider,保留所有列表,指向材质的指针列表或指向灯光的指针列表,任何类型列表。
但是,我的代码看起来过于干扰,每次我必须添加一个新列表时,我必须将它添加到类属性中。
我终于决定做点什么:
class DataProvider
{
public:
using DataListContainer = std::vector<std::vector<boost::any>>;
...
private:
DataListContainer data_;
我正在考虑的问题是根据给定的类型获取内部向量?整个过程似乎很混乱。
除此之外,使用boost::any
类型并不能真正保证内部向量中的类型是唯一的,它可以混合使用。
存储向量向量的正确方法是什么,根据它们存储的类型检索内向量?
答案 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>;