Domyślne argumenty dla szablonów klas
Szablony klas mogą mieć domyślne argumenty parametrów w postaci wartości lub typów.Określ domyślne argumenty używając znaku równości (=) a następnie podaj nazwę typu lub wartość.Dla szablonów z wieloma argumentami, wszystkie argumenty po pierwszym domyślnym argumencie muszą mieć domyślne argumenty.Podczas deklarowania obiektu klasy szablonu z argumentami domyślnymi, można pominąć argumenty aby przyjęły argument domyślny.Jeśli istnieją same domyślne argumenty nie należy pomijać pustych nawiasów.
Szablon, który jest zadeklarowany wiele razy nie może określać domyślnych argumentów więcej niż raz.Poniższy kod demonstruje błąd:
template <class T = long> class A;
template <class T = long> class A { /* . . . */ }; // Generates C4348.
Przykład
W poniższym przykładzie zdefiniowano szablon klasy tablicy z domyślnym typem int dla elementu tablicy oraz domyślną wartością parametru szablonu, określającą rozmiar.
// 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();
}