明示的特殊化の定義と宣言

C++明示的特殊化クラスの定義は、主テンプレートの定義とは無関係です。 特殊化を定義するために、主テンプレートを定義する必要はありません (または、主テンプレートを定義するために、特殊化を定義する必要もありません)。 例えば、コンパイラーは、次のコードを許可します。

template<class T> class A;
template<> class A<int>;
 
template<> class A<int> { /* ... */ };
 

主テンプレートは定義されませんが、明示的特殊化は定義されます。

宣言はされているが、不完全なクラスと同じように定義されていない、明示的特殊化の名前を使用できます。 次の例は、このことを示しています。

template<class T> class X { };
template<>  class X<char>;
X<char>* p;
X<int> i;
// X<char> j;

コンパイラーは、X<char> の明示的特殊化が定義されていないので、 X<char> j の宣言を許可しません。

関連参照

IBM Copyright 2003