我有一个模板类,它有元组,由 vector 填充。
template<typename ...Ts>
class MyClass
{
public:
std::tuple<std::vector<Ts>...> vectors;
};
我想获取由指定索引上的 vector 元素填充的新元组。
template<typename ...Ts>
class MyClass
{
public:
std::tuple<std::vector<Ts>...> vectors;
std::tuple<Ts...> elements(int index)
{
// How can I do this?
}
};
这可能吗?
最佳答案
您可以在 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
在那个地方的 vector 上。我用了at
如果 vector 不是都在该索引处包含项目,但您可以替换为 operator[]
如果您的情况不需要支票。然后将所有结果发送到 make_tuple
构造结果元组对象。
关于C++ vector 元组,按索引从元素创建元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48539715/