C 17 Folds を使用した可変個引数関数呼び出しの簡素化
可変個引数テンプレート引数は、可変数の引数を受け入れる関数を操作する便利な方法を提供します。ただし、各可変長引数で関数を呼び出す再帰チェーンを作成すると、冗長なコードが生成される可能性があります。 C 17 フォールド式または C 17 以前のソリューションを使用してこの問題を解決する方法を次に示します。
C 17 フォールド式:
(f(args), ...);
このフォールド式は次のことができます。すべての可変引数テンプレート引数で関数を呼び出すために使用され、単一の N-arg 関数呼び出しが行われます。
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 の Fold 式はどのようにして可変個引数関数の呼び出しを簡素化できるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。