Argumenty domyślne szablony klasy
Szablony klasy może mieć argumentów domyślne dla parametrów typu lub wartości.Określ domyślne argumenty z równą (=) znaku, po której następuje nazwa typu lub wartości.Wiele argumentów szablonu wszystkie argumenty po pierwszym argumencie domyślna musi posiadać argumenty domyślne.Deklarując obiektu klasy szablonu z argumentami domyślne, należy pominąć argumenty, aby zaakceptować argumentu domyślnego.Jeśli nie istnieją żadne argumenty niedomyślnych, nie pominąć puste nawiasy.
Szablonu, która jest zadeklarowana jako mnożenie nie można określić więcej niż jeden raz argument domyślny.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 szablonu klasy array z domyślnego typu int dla elementu tablicy, a wartość domyślna dla 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();
}