Argomenti predefiniti per i template di classe
I template di classe possono avere argomenti predefiniti per tipo o i parametri di valore.Specificare gli argomenti predefiniti con il segno di uguale (**=**il segno di seguita dal nome del tipo o il valore.per gli argomenti di modello più, tutti gli argomenti dopo che il primo argomento predefinito deve avere argomenti predefiniti.Nel dichiarare un oggetto della classe modello con argomenti predefiniti, omettere gli argomenti per accettare l'argomento predefinito.Se non sono presenti argomenti non predefiniti, non omettere le parentesi angolari vuote.
Un modello archiviato si moltiplica dichiarato non è possibile specificare più di uno volta un argomento predefinito.Il codice seguente viene illustrato un errore:
template <class T = long> class A;
template <class T = long> class A { /* . . . */ }; // Generates C4348.
Esempio
Nell'esempio seguente, un modello di classe di matrice è definito da un tipo predefinito int per l'elemento di matrice e un valore predefinito del parametro di modello che specifica la dimensione.
// 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();
}