Výchozí argumenty pro šablony třídy
Šablony tříd mohou mít pro parametry typů nebo hodnot výchozí argumenty.Výchozí argumenty jsou zadávány znaménkem rovnosti (=) následovaným názvem typu nebo hodnotou.V případě většího množství argumentů šablony musí mít všechny argumenty uvedené za prvním výchozím argumentem své výchozí argumenty.Chcete-li při deklaraci objektu třídy šablony s výchozími argumenty přijmout výchozí argument, vynechejte daný argument.Jsou-li všechny argumenty výchozí, nevynechávejte prázdné lomené závorky.
Vícenásobně deklarovaná šablona nemůže určovat výchozí argument více než jednou.Následující kód znázorňuje chybu:
template <class T = long> class A;
template <class T = long> class A { /* . . . */ }; // Generates C4348.
Příklad
V následujícím příkladu je šablona třídy pole definována s výchozím typem int pro prvky pole a výchozí hodnotou pro parametr šablony určující velikost.
// 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();
}