使用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));
優點:
以上是C 17 折疊表達式如何簡化可變參數函數呼叫?的詳細內容。更多資訊請關注PHP中文網其他相關文章!