Las plantillas (templates) en C++ te permiten escribir funciones y clases genéricas, es decir, puedes crear algoritmos y estructuras de datos que funcionen con diferentes tipos de datos sin tener que escribir el código específico para cada tipo. Vamos a explorar cómo usar plantillas para crear funciones y clases genéricas en C++.
Plantillas de Funciones
Una plantilla de función permite definir una función con parámetros de tipo genérico.
template <typename T>
T suma(T a, T b) {
return a + b;
}
En este ejemplo, `T` es un tipo de datos genérico. La función `suma` toma dos parámetros de tipo `T` y devuelve la suma de esos parámetros.
int main() {
int resultado_entero = suma(5, 3); // Llamada a la función con enteros
std::cout << "Resultado de la suma: " << resultado_entero << std::endl;
double resultado_double = suma(2.5, 3.7); // Llamada a la función con doubles
std::cout << "Resultado de la suma: " << resultado_double << std::endl;
return 0;
}
Plantillas de Clases
Las plantillas también se pueden aplicar a clases.
template <typename T>
class MiClase {
private:
T dato;
public:
MiClase(T valor) : dato(valor) {}
T obtenerDato() {
return dato;
}
};
En este ejemplo, `T` es un tipo de datos genérico que se utiliza para definir la variable miembro `dato` y el constructor.
int main() {
MiClase<int> objeto1(42); // Objeto de tipo int
std::cout << "Dato del objeto1: " << objeto1.obtenerDato() << std::endl;
MiClase<double> objeto2(3.14); // Objeto de tipo double
std::cout << "Dato del objeto2: " << objeto2.obtenerDato() << std::endl;
return 0;
}
Especialización de Plantillas
También puedes proporcionar implementaciones específicas para ciertos tipos de datos utilizando la especialización de plantillas.
template <>
class MiClase<char> {
private:
char dato;
public:
MiClase(char valor) : dato(valor) {}
char obtenerDato() {
return dato;
}
};
Aquí se proporciona una implementación especial para la clase `MiClase` cuando `T` es `char`.
Las plantillas son fundamentales para escribir código genérico y reutilizable en C++. Permiten escribir algoritmos y estructuras de datos que funcionen con diferentes tipos de datos de manera eficiente.