可変個引数テンプレート引数リストの反復
パックされた可変個引数テンプレート引数リストは強力ですが、個々の引数にアクセスする際に課題が生じる可能性があります。この問題は、型に基づいて引数を分離するためにそのようなリストを反復処理する必要がある場合に特に関係します。
これを達成するには、1 つのオプションは、C 17 で導入されたフォールド式を活用することです。この場合、ラムダ式を使用すると、引数を反復処理して目的の操作を実行するループを定義できます。
例を次に示します:
<code class="cpp">#include <iostream> template <class ... Ts> void Foo(Ts && ... inputs) { int i = 0; // Lambda that executes for each passed argument. ([&] { ++i; std::cout << "input " << i << " = " << inputs << std::endl; }(), ...); } int main() { Foo(2, 3, 4u, (int64_t)9, 'a', 2.3); return 0; }</code>
この例では、ラムダは非常に簡潔です。ただし、ループ内ではさらに複雑な操作を実行できます。この手法には C 17 以降が必要であることに注意することが重要です。
反復を返すか終了する必要があるシナリオでは、try/throw および variable/if switch アプローチが利用可能ですが、コードの匂いと考慮する必要があります。やむを得ない場合にのみ使用されます。
以上がC で可変個引数テンプレート引数リストを反復処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。