mok*_*oka 5 c++ types template-meta-programming
我正在寻找一种在编译时动态构建类型列表的方法.我正在创建包含不同类型的组件,并且我想构建一个类型列表,其中包含注册为组件的所有类型.想象一下:
using Name = Component<std::string>;
using Position = Component<Vec2f>;
Run Code Online (Sandbox Code Playgroud)
那么我希望能够与持有型列表落得std::string和Vec2f在这种情况下,我可以访问和扩展,即是这样的:
using AllComponents = SomeMagicTypeThatHoldsAllComponents;
Run Code Online (Sandbox Code Playgroud)
我已经构建了类型列表部分,它的工作原理如下:
using List = typename MakeTypeList<int, double, std::string>::List;
Run Code Online (Sandbox Code Playgroud)
您可以将类型追加或添加到List这样:
using Append = typename AppendType<List, float>::List;
using Prepend = typename PrependType<List, Vec2f>::List;
Run Code Online (Sandbox Code Playgroud)
并按照这样的索引获取类型(这基本上允许您在帮助下扩展类型std::integer_sequence):
using FirstType = typename TypeAt<List, 0>::Type;
Run Code Online (Sandbox Code Playgroud)
我无法解决的问题是如何在后台动态构建此列表而不破坏简单的组件API.有人建议是否或如何实现这一目标?
编辑: 要澄清,我现在能想出的唯一解决方案是将类型列表作为额外的模板参数传递,即
using AllTypes = using MakeTypeList<>::List;
using Name = Component<AllTypes, std::string>;
using Position = Component<AllTypes, Vec2f>;
Run Code Online (Sandbox Code Playgroud)
我感兴趣的是一个解决方案,我不必通过类型列表.
谢谢!