Freigeben über


Standardargumente für Klassenvorlagen

 

Klassenvorlagen können Standardargumente für Typ- oder Wertparameter haben.Geben Sie Standardargumente mit dem Gleichheitszeichen (=) an, gefolgt vom Typnamen oder Wert.Bei mehrfachen Vorlagenargumenten müssen alle Argumente nach dem ersten Standardargument Standardargumente haben.Wenn Sie ein Vorlagenklassenobjekt mit Standardargumenten deklarieren, lassen Sie die Argumente, die das Standardargument akzeptieren, weg.Wenn es keine nicht standardmäßigen Argumente gibt, lassen Sie nicht die leeren spitzen Klammern nicht weg.

Eine Vorlage, die mehrfach deklariert wird, kann ein Standardargument nur einmal angeben.Der folgende Code zeigt einen Fehler:

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

Im folgenden Beispiel werden eine Arrayklassenvorlage mit einem Standardtyp int für das Arrayelement und ein Standardwert für den Vorlagenparameter definiert, der die Größe angibt.

// 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 

Siehe auch

Standardargumente