Compartir a través de


Argumentos predeterminados para las plantillas de clase

Las plantillas de clase pueden tener argumentos predeterminados para los parámetros del tipo o valor.Especifique los argumentos predeterminados con el signo igual (de**=**) seguido del nombre de tipo o el valor.Para varios argumentos de plantilla, todos los argumentos después del primer argumento predeterminado debe tener argumentos predeterminados.Al declarar un objeto de clase de plantilla con argumentos predeterminados, omita los argumentos para aceptar el argumento predeterminado.Si no hay argumentos no predeterminado, no omita los corchetes angulares vacíos.

Una plantilla que se multiplica declarado no puede especificar un argumento predeterminado más de una vez.El código siguiente se muestra un error:

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

Ejemplo

En el ejemplo siguiente, una plantilla de clase array es definido con un tipo predeterminado int para el elemento de matriz y un valor predeterminado para el parámetro de plantilla que especifica el tamaño.

// 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();
}
  

Vea también

Referencia

Argumentos predeterminados