Programación en C++ – Funciones y clases genéricas

Una función genérica se define usando una plantilla de función. Esto permite que la función trabaje con diferentes tipos de datos sin tener que escribir múltiples versiones de la misma función.

#include <iostream>

template <typename T>
T maximo(T a, T b) {
    return a > b ? a : b;
}

int main() {
    int intMax = maximo(5, 10);
    double doubleMax = maximo(3.5, 2.5);

    std::cout << "Max int: " << intMax << std::endl;
    std::cout << "Max double: " << doubleMax << std::endl;

    return 0;
}

Clases Genéricas (Plantillas de Clases): Una clase genérica se define utilizando una plantilla de clase. Esto te permite crear clases que funcionan con diferentes tipos de datos.

#include <iostream>

template <typename T>
class MiContenedor {
public:
    MiContenedor(T valor) : valor_(valor) {}

    T obtenerValor() const {
        return valor_;
    }

private:
    T valor_;
};

int main() {
    MiContenedor<int> intContainer(42);
    MiContenedor<double> doubleContainer(3.14);

    std::cout << "Valor int: " << intContainer.obtenerValor() << std::endl;
    std::cout << "Valor double: " << doubleContainer.obtenerValor() << std::endl;

    return 0;
}

Funciones y Clases Genéricas Especializadas: Puedes especializar plantillas para manejar casos específicos de manera diferente. Esto te permite personalizar el comportamiento de la función o clase genérica para ciertos tipos de datos.

#include <iostream>

template <typename T>
class MiContenedor {
public:
    MiContenedor(T valor) : valor_(valor) {}

    T obtenerValor() const {
        return valor_;
    }

private:
    T valor_;
};

template <>
class MiContenedor<const char*> {
public:
    MiContenedor(const char* valor) : valor_(valor) {}

    const char* obtenerValor() const {
        return valor_;
    }

private:
    const char* valor_;
};

int main() {
    MiContenedor<int> intContainer(42);
    MiContenedor<const char*> strContainer("Hola");

    std::cout << "Valor int: " << intContainer.obtenerValor() << std::endl;
    std::cout << "Valor string: " << strContainer.obtenerValor() << std::endl;

    return 0;
}

Deja un comentario