テンプレートおよび名前解決
テンプレート定義では名前の 3 種類があります。
テンプレートの名前自体とテンプレート定義内で宣言されているを含むローカルに宣言された名前。
テンプレート定義の外部の範囲の名前。
テンプレート引数によってなんらかの方法で依存する依存名という名前です。
最初の 2 種類の名前はクラスと関数スコープに関係すると名前解決するための特別な規則はテンプレート定義に依存する名前の追加された複雑さを扱う必要があります。これはテンプレート引数を使用すると型である場合があるのでテンプレートをインスタンス化するまでコンパイラはこれらの名前に関する負荷がわかっているためです。Nondependent の名前は通常の規則に従っておよびテンプレートの定義の時点で調べられます。これらの名前はテンプレート引数とは無関係に一度だけ調べられたテンプレートから特化したクラスです。依存名はテンプレートがインスタンス化される確認し各特化を個別に調べられますまで上で。
型はテンプレートの引数に依存している場合に依存します。具体的には次のいずれかに依存しています :
テンプレート引数自体 :
T
依存関係を含む完全修飾型の完全修飾名 :
T::myType
不適切なパーツが依存する型を識別して修飾名 :
N::T
基本データ型に依存した型である定数または volatile 型 :
const T
依存した型に基づくポインター参照配列または関数ポインター型 :
T *, T &, T [10], T (*)()
サイズはテンプレート パラメーターに基づく array:
template <int arg> class X { int x[arg] ; // dependent type }
テンプレート パラメーターから構築されたテンプレート型 :
T<int>, MyTemplate<T>
型の依存ファイルと値に応じて
テンプレート パラメーターが型パラメーターとパラメーター値かどうかをテンプレート パラメーターに依存名と式は型の依存ファイルとして分類されるか依存をによって評価します。の値に依存しない式で初期化整数または列挙型を持つようにテンプレートの引数の型への依存を持つテンプレート内で宣言されている識別子は値に応じてと見なされます。
依存関係および値型の式が型の依存ファイルの依存を含んだりまたは変数を評価する式です。異なるこれらの式はテンプレートに使用するパラメーターで意味を持つことができます。