C++ vector 元组,按索引从元素创建元组

标签 c++ c++11 templates c++14

我有一个模板类,它有元组,由 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/

相关文章:

c++ - 如何获得用另一种类型调用仿函数的返回类型?

关于模板化类型和类层次结构的 C++ 函数重载解析

c++ - 在 if-else if 链中使用 Likely()/Unlikely() 预处理器宏

c++ - 如何使用分区解决重复的top-k问题?

C++ 自旋图像资源

c++ - lambda-capture by reference 中的 this 指针

python - 如何在 C++ 中为 Cython 中的两种类型使用模板化函数?

c++ - 在 C++11 中访问 move 对象时发出警告

c++ - 模板堆栈没有推送?

javascript - 删除 html 模板实例