如何有效地实现将矢量数据分配给多个变量?

时间:2018-08-07 16:15:59

标签: c++ c++11 variadic-templates

例如

void assign(vector<int> const& v, int a, float b)
{
    a = v[0];
    b = (float)v[1];
}

此处的值类型不必相同。我想做一个函数来分配可变数量的变量。我可以使用可变参数功能。但是我认为使用参数包可能更有效。如何执行呢?谢谢!

1 个答案:

答案 0 :(得分:8)

折叠表达以求救助!

template <typename ...P> void assign(const std::vector<int> &v, P &... params)
{
    std::size_t index = 0;
    (void(params = static_cast<P>(v[index++])) , ...);
}

如果必须使用C ++ 11,则可以使用虚拟数组技巧:

template <typename ...P> void assign(const std::vector<int> &v, P &... params)
{
    std::size_t index = 0;
    using dummy = int[];
    (void)dummy{0, (void(params = static_cast<P>(v[index++])), 0) ...};
}