テンプレートは宣言と定義の両方が必要になります。テンプレートを定義することで、実装に必要な情報が得られます。次の例は、前述の例で宣言されたテンプレートを定義しています。
template <class Number> Number twice( Number original ) { return original + original; } |
テンプレート定義は通常ヘッダーファイルで行われるので、テンプレート定義が複数のコンパイル単位で繰り返される可能性があります。しかし、すべての定義は同じである必要があります。この制限は「単一定義ルール」と呼ばれています。
コンパイラは、関数パラメータリスト内にテンプレートの型名でないパラメータを含む式をサポートしていません。例を次に示します。
// パラメータリスト内にテンプレートの型名でない // テンプレートパラメータを持つ式はサポートされていません。 template<int I> void foo( mytype<2*I> ) { ... } template<int I, int J> void foo( int a[I+J] ) { ... } |