Sun Studio 12: C++ ユーザーズガイド

6.1.2 関数テンプレートの定義

テンプレートは宣言と定義の両方が必要になります。テンプレートを定義することで、実装に必要な情報が得られます。次の例は、前述の例で宣言されたテンプレートを定義しています。


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] ) { ... }