lezione 05

templates e generic programming

riuso, type safety e prestazioni con template moderni.

livello: intermedio durata: 35 min output: librerie generiche badge: templates

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
start a brief