Las plantillas (templates) en C++ son una herramienta poderosa que permite escribir código genérico. Con ellas, puedes crear funciones y clases que operen con cualquier tipo de dato sin necesidad de reescribir el código para cada tipo. Esto aumenta la reutilización del código y mejora su flexibilidad.
Las plantillas permiten definir funciones o clases genéricas, donde los tipos de datos son parámetros que se especifican al momento de su uso. Existen dos tipos principales de plantillas en C++:
1. Plantillas de función: Permiten crear funciones genéricas.
2. Plantillas de clase: Permiten crear clases genéricas.
#include <iostream>
// Definición de una plantilla de función
template <typename T>
T sumar(T a, T b) {
return a + b;
}
int main() {
std::cout << "Suma de enteros: " << sumar(5, 3) << std::endl;
std::cout << "Suma de flotantes: " << sumar(5.5, 3.3) << std::endl;
return 0;
}
sumar
utiliza el tipo T
, lo que le permite trabajar con diferentes tipos de datos, como enteros o flotantes.
#include <iostream>
// Definición de una plantilla de clase
template <typename T>
class Caja {
private:
T contenido;
public:
void setContenido(T valor) {
contenido = valor;
}
T getContenido() const {
return contenido;
}
};
int main() {
Caja<int> cajaEntero;
cajaEntero.setContenido(42);
std::cout << "Contenido entero: " << cajaEntero.getContenido() << std::endl;
Caja<std::string> cajaString;
cajaString.setContenido("Hola, mundo");
std::cout << "Contenido string: " << cajaString.getContenido() << std::endl;
return 0;
}
Caja
es genérica y puede manejar diferentes tipos de datos (int
, std::string
, etc.).
Caja<int>
, Caja<std::string>
).
1. Reutilización de código: Reduce la duplicación al manejar múltiples tipos de datos con el mismo código.
2. Flexibilidad: Facilita la creación de funciones y clases que se adaptan automáticamente al tipo de datos.
3. Rendimiento: El compilador genera código optimizado para cada tipo utilizado.
Concepto | Sintaxis |
---|---|
Declarar una plantilla |
template <typename T> o template <class T>
|
Usar una plantilla |
NombreClase<Tipo> o Funcion<Tipo>(args)
|
Múltiples tipos genéricos |
template <typename T, typename U>
|
template <typename T, typename U>
void mostrarPar(T a, U b) {
std::cout << "Primer valor: " << a << ", Segundo valor: " << b << std::endl;
}
int main() {
mostrarPar(5, "Hola");
mostrarPar(3.14, true);
return 0;
}
template <typename T = int>
class PorDefecto {
public:
T valor;
PorDefecto(T v = 0) : valor(v) {}
};
template <>
class Caja<std::string> {
private:
std::string contenido;
public:
void setContenido(std::string valor) {
contenido = "Texto: " + valor;
}
std::string getContenido() const {
return contenido;
}
};
Consulta la documentación oficial de C++ sobre plantillas para más detalles.
Jorge García
Fullstack developer