関数テンプレートの明示的特殊化

C++関数テンプレート特殊化では、コンパイラーが関数引き数の型からテンプレート引き数を推定できるのであれば、 テンプレート引き数はオプションです。 次の例は、このことを示しています。

template<class T> class X { };
template<class T> void f(X<T>);
template<> void f(X<int>);

明示的特殊化 template<> void f(X<int>) は、 template<> void f<int>(X<int>) と同等です。

次に関する宣言および定義に対しては、デフォルトの関数引き数は指定できません。

例えば、コンパイラーは、次のコードを許可しません。

template<class T> void f(T a) { };
template<> void f<int>(int a = 5) { };
 
template<class T> class X {
  void f(T a) { }
};
template<> void X<int>::f(int a = 10) { };

関連参照

IBM Copyright 2003