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

Mr.*_*ody 5 c++ templates c++11 c++14

我有一个模板类,它有元组,由向量填充.

template<typename ...Ts>
class MyClass
{
    public:
        std::tuple<std::vector<Ts>...> vectors;
};
Run Code Online (Sandbox Code Playgroud)

我想在指定的索引上使用vectors元素填充新元组.

template<typename ...Ts>
class MyClass
{
public:
    std::tuple<std::vector<Ts>...> vectors;

    std::tuple<Ts...> elements(int index)
    {
        // How can I do this?
    }
};
Run Code Online (Sandbox Code Playgroud)

这甚至可能吗?

Sto*_*ica 8

您可以使用通常的辅助函数技术在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...>{});
}
Run Code Online (Sandbox Code Playgroud)

它只是调用std::get<I>每种类型的序数,然后调用at那个地方的向量.我使用at的情况是,矢量并非都在该索引处持有一个项目,但operator[]如果您的案例不需要检查,您可以替换.然后将所有结果发送make_tuple到构造结果元组对象.