Partager via


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.En déclarant un objet de classe de modèle avec des arguments par défaut, omettez les arguments pour accepter l'argument par défaut.S'il n'existe aucun argument autre que par défaut, n'omettez pas les crochets pointus.

Un modèle qui est déclaré plusieurs fois ne peut pas spécifier un argument par défaut plusieurs fois.Le code suivant illustre une erreur :

template <class T = long> class A;
template <class T = long> class A { /* . . . */ }; // Generates C4348.

Dans l'exemple suivant, un modèle de classe Array 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();
}
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 
0 10 20 30 40 50 60 70 80 90 

Voir aussi

Arguments par défaut