向量的C ++元组,按索引从元素创建元组

没人先生

我有一个模板类,它有元组,由矢量填充。

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?
    }
};

这有可能吗?

讲故事的人-Unslander Monica

您可以在C ++ 14中使用辅助函数的常规技术轻松完成它,该函数接受索引序列作为附加参数:

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以构造结果元组对象。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章