C で非定数変数をテンプレート引数として渡せないのはなぜですか?

Mary-Kate Olsen
リリース: 2024-10-28 12:54:30
オリジナル
662 人が閲覧しました

Why Can't I Pass a Non-Constant Variable as a Template Argument in C  ?

テンプレート引数は定数である必要があります

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート