c++ - 根据包含的类型检索 vector 的 vector

标签 c++ templates boost

我正在开发一个小型 3D 引擎,我想知道如何避免每次都循环访问我的整个层次结构(模型、灯光)以访问灯光、 Material 等...

我决定创建一个单例 DataProvider,保留所有列表、 Material 指针列表或灯光指针列表,任何类型的列表。

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

我最终决定做这样的事情:

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

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

最佳答案

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

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

关于c++ - 根据包含的类型检索 vector 的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38020579/

相关文章:

c++ - Windows 7中的 boost 问题

c++ - 使用 boost 线程和循环缓冲区挂起的生产者/消费者

c++ - 可变参数模板求和运算左关联

c++ - 使用 boost::bind 输出作为数组下标

c++ - 从 C++ 文件中读取和打印 UTF-8 符号

c++ - 如何制作节点数组?

templates - 未呈现基类模板的嵌套@ Html.DisplayFor(model => baseClass, "BaseClass")

c++ - 调整不可迭代容器以通过自定义模板化迭代器进行迭代

c++ - Linux乐观malloc : will new always throw when out of memory?

c++ - 有没有办法根据是否定义将变量宏转换为0或1?