Volver a la página principal
martes 19 noviembre 2024
8

Qué son y cómo usar plantillas (templates) en C++

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.

¿Qué son las plantillas en C++?

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.

Ejemplo básico de plantilla de función

#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;
}

Explicación del ejemplo

  • template <typename T>: Define una plantilla donde T es un tipo genérico.
  • La función sumar utiliza el tipo T, lo que le permite trabajar con diferentes tipos de datos, como enteros o flotantes.

Ejemplo básico de plantilla de clase

#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;
}

Explicación del ejemplo

  • La clase Caja es genérica y puede manejar diferentes tipos de datos (int, std::string, etc.).
  • El tipo se especifica al momento de declarar una instancia de la clase (Caja<int>, Caja<std::string>).

Ventajas de las plantillas en C++

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.

Tabla de sintaxis básica

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>

Ejemplo con múltiples tipos genéricos

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;
}

Más ejemplos de plantillas

Plantilla con valores predeterminados

template <typename T = int>
class PorDefecto {
public:
    T valor;
    PorDefecto(T v = 0) : valor(v) {}
};

Plantilla de clase especializada

template <>
class Caja<std::string> {
private:
    std::string contenido;

public:
    void setContenido(std::string valor) {
        contenido = "Texto: " + valor;
    }

    std::string getContenido() const {
        return contenido;
    }
};

Referencia oficial

Consulta la documentación oficial de C++ sobre plantillas para más detalles.

Etiquetas:
cpp
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer