テンプレートの参照 [C++ 言語]
このトピックでは、宣言済みのテンプレートを使用する方法について説明します。
template-name < template-arg-list >
解説
template-arg-list は、以下のコンマ区切りのリストである必要があります。
expressiontype-name
式のすべての引数は定数式である必要があります。 以前に生成済みのテンプレートに厳密に一致するものがない場合、コンパイラはそのテンプレート クラスまたはテンプレート関数の新しいインスタンスを作成します (インスタンス化と呼ばれます)。 たとえば、「メンバー関数テンプレート」で定義されている MyStack クラスを参照するには、次のようにします。
MyStack< unsigned long, 5 > stack1;
// Creates a stack of unsigned longs.
MyStack< DWORD, 5 >stack2;
// Uses code created above.
MyStack< char, 6 > stack3;
// Generates new code.
MyStack< MyClass, 6 > stack4;
// Generates stack of MyClass objects.
生成された関数テンプレートは、それぞれ固有の静的変数とメンバーを作成します。
すべてのテンプレート引数は、使用される時点でアクセス可能になっている必要があります。
上記の構文規則の例外は、::、.、-> のいずれかの演算子の後ろの式でメンバー テンプレートの特殊化を明示する場合です。 このような場合は、これらの演算子の後ろに template キーワードを指定できます。 標準 C++ では、一部の状況で template キーワードが必須ですが、Visual C++ ではこのようなコンテキストでこのキーワードが常に省略可能となっており、その点が標準とは異なります。 これらの演算子に続く場合を除いて、特殊化で template キーワードを使用することはできません。
[ :: | -> | . ] template template-name < template-arg-list >
たとえば、以下は、X クラスのメンバーであるメンバー関数テンプレート f<T>(int) の int 特殊化を呼び出し、パラメーター 10 を渡す場合の指定です。
X::template f<int>(10);