perché template
i template permettono di scrivere codice generico senza sacrificare prestazioni. il compilatore genera versioni specifiche per ogni tipo.
sono la base della stl e di molti pattern moderni in c++.
template di funzione
template <typename T>
T max_value(T a, T b) {
return a > b ? a : b;
}
int best = max_value(3, 7);
template di classe
template <typename T>
class Box {
public:
explicit Box(T value) : value_(value) {}
T value() const { return value_; }
private:
T value_;
};
Box<std::string> name("buzatu");
specializzazioni
puoi personalizzare il comportamento per tipi specifici.
template <>
class Box<bool> {
public:
explicit Box(bool value) : value_(value) {}
bool value() const { return value_; }
private:
bool value_;
};
best practice
- mantieni i template piccoli e leggibili
- usa concept o static_assert per messaggi chiari
- separa interfaccia e implementazione quando possibile
tip: in c++20 usa concept per limitare i tipi ammessi.
panoramica
In questo capitolo su templates e generic programming, riuso, type safety e prestazioni con template moderni. L'obiettivo è trasformare i concetti in micro-pattern riutilizzabili con esempi piccoli e verificabili.
Lavora in sequenza: leggi, prova, modifica gli snippet e annota i trade-off principali (performance, leggibilità, manutenzione).
badge: templates
obiettivi
- capire e applicare perché template in uno scenario reale
- capire e applicare funzioni in uno scenario reale
- capire e applicare classi in uno scenario reale
- capire e applicare specializzazioni in uno scenario reale
scheda rapida
#include <iostream>
#include <vector>
int main() {
std::vector<int> dati{1, 2, 3};
for (auto &v : dati) {
v *= 2;
}
for (const auto &v : dati) {
std::cout << v << " ";
}
std::cout << "\n";
return 0;
}
Adatta questo scheletro agli esempi della lezione e sostituisci i dati con il tuo dominio.
mini progetto
Utility generica clamp.
- definisci template
- gestisci tipi confrontabili
- test con int/double
- aggiungi static_assert
output atteso: uno script o query ripetibile con risultati verificabili.
checklist
- ho eseguito gli snippet e controllato l'output
- ho annotato almeno 2 trade-off
- ho completato il mini progetto
- ho salvato un riepilogo personale