Condividi tramite


Argomenti predefiniti per modelli di classe

I modelli di classe possono avere argomenti predefiniti per i parametri del tipo o del valore. Specificare gli argomenti predefiniti con il segno uguale (=) seguito dal nome del tipo o dal valore. Per più argomenti di modello, tutti gli argomenti dopo il primo argomento predefinito devono 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 acute vuote.

Un modello che è dichiarato più volte non può specificare un argomento predefinito più di una volta. L'errore viene illustrato nel codice riportato di seguito:

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

Esempio

Nell'esempio seguente, un modello di classe matrice viene definito con 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();
}
  

Vedere anche

Riferimenti

Argomenti predefiniti