ホームページ >バックエンド開発 >C++ >メンバータイプから推論するときにテンプレートタイプの推論が失敗するのはなぜですか?

メンバータイプから推論するときにテンプレートタイプの推論が失敗するのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-19 09:24:10172ブラウズ

Why Does Template Type Deduction Fail When Inferring from a Member Type?

テンプレート型推論の推論失敗

型メンバーからテンプレート引数を推論しようとする場合、コンテキストが推論可能であることを確認することが重要です。指定されたコードでは、コンパイラが型名 TMap::Type からテンプレート引数 T を推定しようとすると、テスト関数内でエラーが発生します。

この失敗は、「推定不可能なコンテキスト」の概念に起因します。 。」この場合、テンプレート タイプ TMap のメンバー タイプ 'Type' は、テンプレート引数 T と固有の関係を持ちません。

TMap の仮想特殊化を考えてみましょう:

template <>
struct TMap<SomeType> {
    typedef std::map<double, double> Type;
};

コンパイラーが TMap::Type から T を推定する必要がある場合、あいまいさが発生します。 TMap::Type の値は std::map です。ただし、TMap の T が 1 であることは保証されません。

TMap をさらに特殊化すると:

template <>
struct TMap<OtherType> {
    typedef std::map<double, double> Type;
};

状況はさらに悪化し、次のことが当てはまります:

  • TMap
  • TMap::Type = std::map

この曖昧さを考慮すると、コンパイラーは T が SomeType であるか OtherType であるかを判断できません。また、可能な選択肢の数を決定したり、それらの選択肢を識別したりすることもできません。

したがって、テンプレート メンバーの型がテンプレート引数と直接の関係がないこのようなコンテキストでは、テンプレート引数の推定は失敗し、コンパイラはエラーを発生させます。エラー。

以上がメンバータイプから推論するときにテンプレートタイプの推論が失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。