Аргументы по умолчанию для шаблонов класса
Шаблоны классов могут иметь аргументы по умолчанию для параметров типа или значения.Укажите аргументы по умолчанию со знака равенства (=), за которым следует имя типа или значением.Для нескольких аргументов шаблона, все аргументы после того, как первый по умолчанию аргумент должен иметь аргументы по умолчанию.При объявлении объект класса шаблона с аргументами по умолчанию, опустите аргументов для принятия по умолчанию для аргумента.Если никакие аргументы, отличное от значения по умолчанию, не пропускать пустые угловые скобки.
Шаблон, умножает объявлено не может определить по умолчанию аргумент несколько раз.Следующий Код демонстрирует ошибки:
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();
}