パック拡張によるパラメータ パックのループ
提供されたコード スニペットでは、パック展開構文。ただし、コードは「パラメータ パックはこのコンテキストで展開する必要があります。」というエラーでコンパイルに失敗します。
この問題を解決するには、パック展開が許可されているコンテキスト内に配置する必要があります。適切な場所の 1 つは、中括弧付き初期化リスト内です。次の変更されたコードを考えてみましょう:
template<typename... Args> static void foo2(Args &&... args) { int dummy[] = { 0, ( (void) bar(std::forward<Args>(args)), 0) ... }; }
その仕組みは次のとおりです:
この変更により、コードは正常にコンパイルされ、パラメーター パックをループします。
C 17 Fold 式
C 17 では、Fold 式を使用してコードを簡略化できます。
((void) bar(std::forward<Args>(args)), ...);
この式はパックを展開し、指定された操作を適用します (この場合、 bar()) 左から右。
以上がパック拡張を使用して C パラメータ パックを正しくループするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。