首頁  >  文章  >  後端開發  >  C 17 折疊表達式如何簡化可變參數函數呼叫?

C 17 折疊表達式如何簡化可變參數函數呼叫?

Barbara Streisand
Barbara Streisand原創
2024-11-19 11:17:02914瀏覽

How Can C  17 Fold Expressions Simplify Variadic Function Invocation?

使用C 17 折疊簡化可變參數函數呼叫

可變參數模板參數提供了一種便捷的方法來處理接受可變數量參數的函數。但是,建立遞歸鏈來呼叫每個可變參數上的函數可能會導致冗餘程式碼產生。以下是如何使用 C 17 折疊表達式或 C 17 之前的解決方案來解決此問題。

C 17 折疊表達式:

(f(args), ...);

此折疊表達式可以用於在所有可變參數模板參數上調用函數,從而產生單一N- arg 函數

Pre-C 17解決方案:

1.將函數包裹在識別符中:

將函數轉換為回傳一個int,它可以用作初始值設定項列表中的虛擬參數:

int print_wrap(const T& t) {
  print(t);
  return 0;
}

2.建立列表初始值設定項:

使用列表初始值設定項來擴展可變參數並呼叫修改後的函數:

{ print_wrap(args)... }

3.定義助理命名空間:

要使此方法可重複使用,請定義助理命名空間:

namespace so {
  using expand_type = int[];
}

#define SO_EXPAND_SIDE_EFFECTS(PATTERN) ::so::expand_type{ 0, ((PATTERN), 0)... }

4.用法:

SO_EXPAND_SIDE_EFFECTS(f(args));

優點:

  • 僅產生具有N 個參數的單一函數呼叫。
  • 支援具有重載的逗號運算子。
  • 確保從左到右求值參數。

以上是C 17 折疊表達式如何簡化可變參數函數呼叫?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn