我有一个模板类,它有元组,由向量填充。
template<typename ...Ts>
class MyClass
{
public:
std::tuple<std::vector<Ts>...> vectors;
};
我希望在指定索引上使用vectors元素填充新元组。
template<typename ...Ts>
class MyClass
{
public:
std::tuple<std::vector<Ts>...> vectors;
std::tuple<Ts...> elements(int index)
{
// How can I do this?
}
};
这甚至可能吗?
答案 0 :(得分:8)
你可以使用通常的辅助函数技术在C ++ 14中轻松完成它,该函数接受index sequence作为附加参数:
template<std::size_t... I>
auto elements_impl(int index, std::index_sequence<I...>)
{
return std::make_tuple(
std::get<I>(vectors).at(index)...
);
}
auto elements(int index)
{
return elements_impl(index, std::index_sequence_for<Ts...>{});
}
它只是为每种类型的序数调用std::get<I>
,然后在该位置的向量上调用at
。我使用了at
,以防向量并非都在该索引处持有项目,但如果您的案例不需要检查,则可以替换operator[]
。然后将所有结果发送到make_tuple
以构造结果元组对象。