C が推定不可能なコンテキストでテンプレート引数を推定できないのはなぜですか?
Dec 26, 2024 pm 01:47 PMなぜ C は推定不可能なコンテキストで T を推定できないのですか?
指定されたコード スニペットでは、テンプレート構造体 TMap は次のように定義されています。ネストされた型 テンプレート引数 T を使用して std::map の特殊化を表す型。ただし、コンパイラは推定に失敗します。関数 test 内の T。
Non-Deducible Context
コードが型 typename TMap<T>:: を持つ引数を指定して test を呼び出すため、エラーが発生します。 & と入力します。T は明示的に指定されていません。この状況は、推論不可能なコンテキストと呼ばれます。
型推論のあいまいさ
推論不可能なコンテキストでは、コンパイラは次のようになります。引数の型が T を一意に決定しないため、テンプレート引数を推論できません。たとえば、次のことを考えてください。 scenario:
template <> struct TMap<SomeType> { typedef std::map<double, double> Type; }; template <> struct TMap<OtherType> { typedef std::map<double, double> Type; };
この場合、TMap<SomeType>::Type と TMap<OtherType>::Type は両方とも std::map<double, double> と同一です。したがって、コンパイラは T が SomeType であるか OtherType であるかを推論できません。
結果
推論不可能なコンテキストの制限には重要な意味があります。
- コンパイラが、渡された引数の型に基づいてテンプレートを暗黙的に特殊化することを防ぎます。関数。
- ジェネリック型を引数として関数を呼び出す場合は、明示的なテンプレート引数の推論または明示的なテンプレート引数の指定が必要です。
軽減策
この制限を軽減するには、テンプレートのテンプレート引数や C 20 の std::is_same_v などの手法を使用して手動で推定することができます。テンプレート引数を指定するか、明示的なテンプレート パラメーター リストを指定します。
以上がC が推定不可能なコンテキストでテンプレート引数を推定できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

人気の記事

人気の記事

ホットな記事タグ

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











C言語関数によって返される値の種類は何ですか?返品値を決定するものは何ですか?

STL(ソート、検索、変換など)のアルゴリズムを効率的に使用するにはどうすればよいですか?
