类模板的默认参数

 

类模板可以具有类型或值形参的默认实参。使用等号 (=) 后跟类型名称或值来指定默认参数。对于多个模板参数,第一个默认参数后的所有参数必须具有默认参数。声明带默认参数的模板类对象时,请省略参数以接受默认参数。如果没有非默认参数,请不要忽略空尖括号。

多次声明的模板不能多次指定一个默认参数。下面的代码演示了一个错误:

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();
}
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
0 10 20 30 40 50 60 70 80 90

请参阅

默认参数