テンプレート・パラメーターのデフォルトの引き数

C++テンプレート・パラメーターは、デフォルトの引き数を持つことができます。 デフォルトのテンプレート引き数のセットは、任意のテンプレートの宣言すべてに累積していきます。 次の例は、このことを示しています。

template<class T, class U = int> class A;
template<class T = float, class U> class A;
 
template<class T, class U> class A {
   public:
      T x;
      U y;
};
 
A<> a;

メンバー a.x の型は float で、a.y の型は int です。

デフォルトの引き数を、同じスコープ内の異なる宣言にある、 同じテンプレート・パラメーターに与えることはできません。 例えば、コンパイラーは、次の表記を許可しません。

template<class T = char> class X;
template<class T = char> class X { };

あるテンプレート・パラメーターが、デフォルトの引き数を持つ場合、 それに続くテンプレート・パラメーターも、すべてデフォルトの引き数を持つはずです。 例えば、コンパイラーは、次の表記を許可しません。

template<class T = char, class U, class V = int> class X { };

テンプレート・パラメーター U は、デフォルトの引き数が必要です。 あるいは T のデフォルトを除去する必要があります。

テンプレート・パラメーターのスコープは、その宣言のポイントからそのテンプレート定義の終了までです。 つまり、他のテンプレート・パラメーター宣言内のテンプレート・パラメーターの名前、 およびそれらのデフォルトの引き数を使用できるということです。 次の例は、このことを示しています。

template<class T = int> class A;
template<class T = float> class B;
template<class V, V obj> class C;
// a template parameter (T) used as the default argument
// to another template parameter (U)
template<class T, class U = T> class D { };

関連参照

IBM Copyright 2003