Standardargumente Klassenvorlagen
Klassenvorlagen können Standardargumente für Typ- oder Wertparameter haben.Geben Sie Standardargumente mit demselben (=) an, das aus dem Typnamen oder dem Wert folgen.Bei mehreren Vorlagenargumente alle Argumente, nachdem das erste Standardargument Standardargumente haben muss.Wenn Sie ein Vorlagenklassen Objekt mit Standardargumenten deklarieren, können Sie die Argumente auslassen, um das Standardargument zu übernehmen.Wenn keine nicht standardmäßigen Argumente vorhanden sind, legen Sie keine leeren spitzen Klammern weglassen.
Eine Vorlage, die deklariert ist, multiplizieren kann ein standardmäßiges Argument nicht mehrmals angeben.Der folgende Code enthält einen Fehler:
template <class T = long> class A;
template <class T = long> class A { /* . . . */ }; // Generates C4348.
Beispiel
Im folgenden Beispiel wird ein Array klassenvorlage mit einem Standardtyp int für das Arrayelement und ein Standardwert für den Vorlagenparameter definiert, der die Größe darstellt.
// 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();
}