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