【发布时间】:2018-11-18 23:05:44
【问题描述】:
我有以下类型列表:
using ComponentList = brigand::list<TransformComponent, ObjectComponent, BodyComponent>
如何将以前的列表转换为如下所示的新列表:
using ComponentHandleList = brigand::list<entityx::ComponentHandle<TransformComponent>, entityx::ComponentHandle<ObjectComponent>, entityx::ComponentHandle<BodyComponent>>;
我基本上想生成一个新列表,其中包含前一个列表中每个元素的包装器。 我尝试使用:
using ComponentHandleList = brigand::transform<ComponentList, AddComponentHandle<brigand::_1>>;
但我对元编程知之甚少,未能实现struct AddComponentHandle<>,它将采用T 类型并将其转换为entityx::ComponentHandle<T>。 Brigand 包含有关转换类型列表的相关documentation,通过显示使用std::add_pointer<> 将每种类型T 转换为T* 的示例。这是我想做的同一件事,但从T 到entityx::ComponentHandle<T>。如何转换第一个列表使其看起来像第二个?
【问题讨论】:
标签: c++ c++11 templates variadic-templates template-meta-programming