テンプレート引数は定数である必要があります
C では、テンプレート引数はコンパイル中に評価可能な定数式である必要があります。これにより、テンプレートによって生成されたコードがコンパイル時に修正され、最適化されることが保証されます。
定数以外の変数をテンプレート引数として渡せないのはなぜですか?
非定数変数 i をテンプレート引数として渡そうとしたときにエラーが発生するのは、コンパイラーがコンパイル時にその値を評価できないためです。 i の値は実行中にのみ認識されるため、テンプレートの特殊化のパラメーターとして使用することはできません。
テンプレート引数を反復するための代替ソリューション
目的を達成するにはAPI インターフェイスを変更せずにこの目的を達成するには、テンプレートの特殊化を利用するアプローチが 1 つあります。これには、さまざまなテンプレート引数に特化した複数のオーバーロード関数を作成することが含まれます。この場合、個々の関数modify、modify、...、modifyを定義します。さまざまな引数値を処理します。
非定数引数を使用してテンプレート関数を呼び出す
VAR などの非定数引数を使用して変更関数を呼び出すにはコードでは、適切なテンプレート特殊化を動的に作成して呼び出すプリプロセッサ マクロまたはヘルパー関数を使用できます。ただし、このアプローチは標準 C ではないため、コンパイル時エラーを避けるために注意が必要です。
テンプレートの特殊化を使用した例
テンプレートの特殊化を使用したソリューションの例を次に示します。
<code class="cpp">template<> void modify<1>() { /* ... */ } template<> void modify<2>() { /* ... */ } // ... template<> void modify<10>() { /* ... */ }</code>
以上がC で非定数変数をテンプレート引数として渡せないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。