簡體   English   中英

統一擴展兩個參數包

[英]Expanding two parameter packs in unison

我正在使用來自另一個容器的值更新容器中的一些元素(在編譯時選擇)。 現在我正在做類似這樣的事情:

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)>{});
} 

是的,它是可能的(只要它們具有相同的大小)。

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], ...);
}

已驗證。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM