ホームページ > バックエンド開発 > C++ > C テンプレートの演繹は、部分順序付けを使用して特殊化をどのように決定しますか?

C テンプレートの演繹は、部分順序付けを使用して特殊化をどのように決定しますか?

Linda Hamilton
リリース: 2024-12-02 10:20:12
オリジナル
276 人が閲覧しました

How Does C   Template Deduction Determine Specialization Using Partial Ordering?

テンプレート演繹における部分順序付け手順

部分順序付け手順は、C テンプレート演繹における関数テンプレート間の特殊化関係を決定します。これには、テンプレートごとに変換された関数タイプを作成し、それらを比較に使用することが含まれます。

  1. 変換された関数タイプ:
    テンプレートごとに、一意の値を置き換えることによって、変換された関数タイプが作成されます。関数型のテンプレート パラメーターの型。
  2. 一致する引数とパラメータ:
    一方のテンプレートの変換された関数タイプは、次の 2 つのケースを使用して、もう一方のテンプレートの元の関数テンプレートと照合されます:

    • 引数テンプレートとして変換された type-1、およびパラメータテンプレートとして元のテンプレート-2
    • 引数テンプレートとして変換されたタイプ-2、パラメータとして元のテンプレート-1 template
  3. 一致の成功と順序:
    いずれの場合でも、型推論が変換された関数の型を元の関数テンプレートに正常に一致させることができる場合、テンプレートは 1 つだけです。他よりも専門的です。両方向で一致が成功した場合、どちらのテンプレートも特殊化されていません。

例:

次の 2 つの関数テンプレートを考えてみましょう:

template<typename T, typename U>
void foo(T, U); // original #1

template<typename T>
void foo(T const*, X<T>); // original #2
ログイン後にコピー

変換後のマッチングタイプ:

  • 1b 対 #2: 型推定はパラメーターと一致できません。

  • 2b 対 #1: 型推定はパラメーターと一致します ( T = 文字定数*、U = X).

結論: オーバーロード #2 は #1 よりも特殊化されています。

以上がC テンプレートの演繹は、部分順序付けを使用して特殊化をどのように決定しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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