Home

ITA - Appunti Cpp 015 - Templates

linux cpp

I template sono una funzionalità che consente di scrivere codice generico, codice che può funzionare con tipi diversi senza dover essere riscritto per ciascun tipo. In pratica, i template permettono di definire funzioni, classi, e alias che possono operare su qualsiasi tipo di dato, rendendo il codice più flessibile e riutilizzabile.

NB: un trm

Esempi per i Templates

Template di Funzione

Un template di funzione consente di scrivere una funzione che può operare su diversi tipi di dati senza dover specificare il tipo esatto:


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

int main() {
    int x = 10, y = 20;
    double a = 10.5, b = 7.5;

    std::cout << max(x, y) << std::endl; // Output: 20
    std::cout << max(a, b) << std::endl; // Output: 10.5
    return 0;
}

Template di Classe

I template di classe funzionano in modo simile ai template di funzione, ma consentono di creare classi generiche che possono operare su diversi tipi di dati.


template <typename T>
class Box {
private:
    T value;
public:
    Box(T val) : value(val) {}
    T getValue() {
        return value;
    }
};

int main() {
    Box<int> intBox(10);
    Box<double> doubleBox(15.5);

    std::cout << intBox.getValue() << std::endl;   // Output: 10
    std::cout << doubleBox.getValue() << std::endl; // Output: 15.5
    return 0;
}

Template con Parametri Multipli

I template possono anche avere più parametri di tipo:


template <typename T, typename U>
class Pair {
public:
    T first;
    U second;
    Pair(T f, U s) : first(f), second(s) {}
};

int main() {
    Pair<int, double> p(10, 15.5);
    std::cout << "First: " << p.first << ", Second: " << p.second << std::endl;
    return 0;
}

Specializzazione di Template

A volte, può essere necessario fornire una specifica implementazione per un determinato tipo. Questo è possibile tramite la specializzazione dei template.


template <>
class Box<char> {
private:
    char value;
public:
    Box(char val) : value(val) {}
    char getValue() {
        return std::toupper(value);
    }
};

int main() {
    Box<char> charBox('a');
    std::cout << charBox.getValue() << std::endl; // Output: A
    return 0;
}

Riferimenti