一起扩展两个参数包

时间:2019-01-10 12:15:33

标签: c++ templates

我正在使用另一个容器中的值更新容器中的某些元素(在编译时选择)。现在,我正在做类似的事情:

template<size_t... indices>
void update(value_t values, index_sequence<indices...>) {
  int i = 0; 
  ((data[indices] = values[i++], ...);
} 

问题:是否可以通过使用另一个编译时序列来避免使用变量i,例如遵循以下内容:

template<size_t... indices1, size_t... indices2>
void update_helper(value_t values, index_sequence<indices1...>, 
                                   index_sequence<indices2...>) {
  static_assert(sizeof...(indices1) == sizeof...(indices2), "");
  ((data[indices1] = values[indices2], ...);
} 

template<size_t... indices>
void update(value_t values, index_sequence<indices...> i) {
  update_helper(values, i, make_index_sequence<sizeof...(indices)>{});
} 

1 个答案:

答案 0 :(得分:3)

是的(只要它们的大小相同)是可能的。

template <size_t... indices1, size_t... indices2>
void update_helper(value_t values,
                   index_sequence<indices1...>, 
                   index_sequence<indices2...>)
{
    static_assert(sizeof...(indices1) == sizeof...(indices2), "");
    ((data[indices1] = values[indices2], ...);
}

有效。