Plantilla C++ Múltiples Tipos

Sheeraz Gul 12 octubre 2023
Plantilla C++ Múltiples Tipos

Este tutorial demuestra el uso de plantillas de tipo múltiple en C++.

Plantilla C++ Múltiples Tipos

Las plantillas en C++ se pueden definir como el modelo de las fórmulas para crear funciones y clases genéricas. Las plantillas son herramientas simples pero poderosas en C++, donde la idea es pasar el tipo de datos a los parámetros para que no podamos volver a escribir el mismo código para diferentes tipos de datos.

Las plantillas se expanden como macros en el momento de la compilación. La única diferencia es que el compilador verificará los tipos de datos antes de expandir las plantillas.

Las plantillas se pueden definir donde el código fuente solo contiene clases o funciones, pero el código del compilador contendrá múltiples copias de estas clases o funciones.

Ahora la plantilla de tipo múltiple se puede definir como una plantilla miembro de una clase que también es una plantilla y se define fuera de su definición de plantilla de clase; esta definición de clase debe especificarse con los parámetros de plantilla de la plantilla de clase seguidos de los parámetros de plantilla de miembro.

Hay dos tipos de plantillas en C++.

Plantilla de función

Una plantilla de función puede trabajar con varios tipos de datos simultáneamente, mientras que una función estándar no puede hacerlo. La sintaxis de la plantilla de función se encuentra a continuación.

template <class DataType>
Returntype FunctionName(parameter list) {
  // function body
}

Probemos un ejemplo simple de una plantilla de función.

#include <iostream>
using namespace std;

// This template function will work for all data types/ it will return the
// minimum value from given parameters
template <typename Delftstack>
Delftstack MinValue(Delftstack a, Delftstack b) {
  return (a < b) ? a : b;
}

int main() {
  cout << MinValue<int>(78, 354) << endl;  // Call the template function for int
  cout << MinValue<double>(336.23, 4673.23)
       << endl;  // Call the template function for double
  cout << MinValue<char>('s', 'y')
       << endl;  // Call the template function for char

  return 0;
}

Lo anterior contiene una función de plantilla, MinValue, que funcionará para todos los tipos de datos y devolverá el valor mínimo de los valores dados. Ver la salida:

78
336.23
s

Plantilla de clase

La plantilla de clase también sabe que las plantillas genéricas funcionan de manera similar a las plantillas de funciones. Las plantillas de clase definen una familia de clases en C++; la sintaxis de la plantilla de clase se encuentra a continuación.

template <class Ttype>
class ClassName {
  // class body;
}

Ahora probemos un ejemplo usando la plantilla de clase.

#include <iostream>
using namespace std;

template <typename Delftstack>
class DemoArray {
 private:
  Delftstack* ptr;
  int arraysize;

 public:
  DemoArray(Delftstack arr[], int number);
  void print();
};

template <typename Delftstack>
DemoArray<Delftstack>::DemoArray(Delftstack arr[], int number) {
  ptr = new Delftstack[number];
  arraysize = number;
  for (int x = 0; x < arraysize; x++) ptr[x] = arr[x];
}

template <typename Delftstack>
void DemoArray<Delftstack>::print() {
  for (int x = 0; x < arraysize; x++) cout << " " << *(ptr + x);
  cout << endl;
}

int main() {
  int arr[7] = {23, 12, 43, 74, 55, 36, 67};
  DemoArray<int> demo(arr, 7);
  demo.print();
  return 0;
}

El código anterior crea una clase de matriz de plantilla y un método de plantilla para imprimir los miembros de una matriz; definimos la plantilla de miembro fuera de la clase plantilla. Ver la salida:

23 12 43 74 55 36 67

Plantilla de clase con varios tipos

Una plantilla de clase con múltiples tipos significa que tenemos que definir una plantilla de clase con múltiples parámetros, lo cual es posible con C++. La sintaxis para definir una plantilla de clase con varios tipos se encuentra a continuación.

template <class Delft1, class Delft2, class Delft3 = char>
class DemoClassTemplate {
  // class body
}

Pasemos al ejemplo para comprender la plantilla de clase con varios tipos.

#include <iostream>
using namespace std;

// Class template containing multiple type parameters
template <class Delft1, class Delft2, class Delft3 = char>
class DemoClassTemplate {
 private:
  Delft1 value1;
  Delft2 value2;
  Delft3 value3;

 public:
  DemoClassTemplate(Delft1 v1, Delft2 v2, Delft3 v3)
      : value1(v1), value2(v2), value3(v3) {}  // constructor

  void printVar() {
    cout << "The Value 1 = " << value1 << endl;
    cout << "The Value 2 = " << value2 << endl;
    cout << "The Value 3 = " << value3 << endl;
  }
};

int main() {
  // object with int, double and char types using the template class
  DemoClassTemplate<int, double> DemoObject1(57, 34.7, 'Delftstack');
  cout << "DemoObject 1 Values: " << endl;
  DemoObject1.printVar();

  // object with int, double and boolean types using the template class
  DemoClassTemplate<double, char, bool> DemoObject2(789.8, 'Delft', true);
  cout << "\nDemoObject 2 values: " << endl;
  DemoObject2.printVar();

  return 0;
}

Como podemos ver, el código anterior crea una clase de plantilla con varios parámetros de tipo que contienen parámetros predeterminados. Ahora, podemos crear objetos de esta clase de plantilla y usar cualquier tipo de datos que queramos.

Producción :

DemoObject 1 Values:
The Value 1 = 57
The Value 2 = 34.7
The Value 3 = k

DemoObject 2 values:
The Value 1 = 789.8
The Value 2 = t
The Value 3 = 1
Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook