Arguments par défaut pour les modèles de classe
Les modèles de classe peuvent avoir des arguments par défaut pour les paramètres de type ou de valeur.Spécifiez les arguments par défaut avec le signe égal (=) suivi du nom ou de la valeur de type.Pour plusieurs arguments template, tous les arguments après le premier argument par défaut doivent avoir des arguments par défaut.Lorsque vous déclarez un objet de classe de modèle avec des arguments par défaut, omettez les arguments pour recevoir l'argument par défaut.S'il n'y a aucun argument autre, n'omettez pas les crochets vides.
Un modèle qui est multiply déclaré impossible de spécifier un argument par défaut plusieurs fois.Le code suivant affiche une erreur :
template <class T = long> class A;
template <class T = long> class A { /* . . . */ }; // Generates C4348.
Exemple
Dans l'exemple suivant, un modèle de classe de tableau est défini avec un type par défaut int pour l'élément de tableau et une valeur par défaut pour le paramètre de modèle spécifiant la taille.
// 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();
}