次の方法で共有


クラス テンプレートの既定の引数

クラス テンプレートは、型または値パラメーターの既定の引数を指定できます。 既定の引数は、等値記号 (=) の後に型名または値を指定します。 テンプレート引数が複数ある場合、最初の既定の引数の後は、すべての引数に既定の引数が必要です。 既定の引数を持つテンプレート クラス オブジェクトを宣言する場合、既定の引数を受け入れるには、引数を省略します。 既定の引数以外に引数がない場合は、空の山かっこを省略しないでください。

重複して宣言されるテンプレートでは、既定の引数を複数回指定することはできません。 エラーのコード例を次に示します。

template <class T = long> class A;
template <class T = long> class A { /* . . . */ }; // Generates C4348.

使用例

次の例では、配列クラス テンプレートが、配列要素の既定の型 int と、サイズを指定するテンプレート パラメーターの既定値付きで定義されています。

// template_default_arg.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;

template <class T = int, int size = 10> class Array
{
   T* array;
public:
   Array()
   {
      array = new T[size];
      memset(array, 0, size * sizeof(T));
   }
   T& operator[](int i)
   {
      return *(array + i);
   }
   const int Length() { return size; }
   void print()
   {
      for (int i = 0; i < size; i++)
      {
         cout << (*this)[i] << " ";
      }
      cout << endl;
   }
};

int main()
{
   // Explicitly specify the template arguments:
   Array<char, 26> ac;
   for (int i = 0; i < ac.Length(); i++)
   {
      ac[i] = 'A' + i;
   }
   ac.print();
   
   // Accept the default template arguments:
   Array<> a; // You must include the angle brackets.
   for (int i = 0; i < a.Length(); i++)
   {
      a[i] = i*10;
   }
   a.print();
}
  

参照

関連項目

既定の引数