【发布时间】:2017-01-29 20:21:32
【问题描述】:
我有一个向量元组,我想将初始化列表中的每个值push_back() 放入“向量元组”中的相应向量中。代码中的create() 函数是我想做的地方。
template<typename...Fields>
class ComponentManager
{
using Index = int;
public:
/**
* Provides a handle to a component
**/
struct ComponentHandle {
static constexpr Index Nil = -1;
bool nil() { return index == Nil; }
const Index index;
};
ComponentHandle lookup(Entity e) {
return ComponentHandle{get(m_map,e,-1)};
}
template<int i>
auto get(ComponentHandle handle) {
return std::get<i>(m_field)[handle.index];
}
ComponentHandle create(Entity e, Fields ...fields) {
m_entity.push_back(e);
// m_fields.push_back ... ???
}
private:
std::vector<Entity> m_entity;
std::tuple<std::vector<Fields>...> m_field;
std::map<Entity,Index> m_map;
};
例子:
Entity e1, e2;
ComponentManager<int,float,int> cm{};
cm.create(e1, 42, 1337.0, 99);
cm.create(e2, 84, 2674.0, 198);
// Resulting contents of cm.m_field tuple
// {
// vector<int> [ 42, 84 ],
// vector<float> [ 1337.0, 2674.0 ]
// vector<int> [ 99, 198 ]
// }
【问题讨论】:
-
你有一个向量的
tuple,而不是元组的向量。您能否通过一些示例输入和所需输出来澄清您的问题? -
我修复了这个问题并澄清了它是一个初始化列表,而不是一个要从中检索值的元组