Vai al contenuto
Modulo 4

Template e programmazione generica

Scrivi astrazioni davvero generiche, riutilizzabili e a costo zero usando template, concept e programmazione a tempo di compilazione.

Fondamenti dei template

  1. Template di funzione e deduzione dei tipi

    Impara a scrivere funzioni che funzionano con qualsiasi tipo. Comprendi la deduzione degli argomenti template, i parametri non di tipo e perché i template vivono negli header.

  2. Template di classe e CTAD

    Costruisci strutture dati generiche con i template di classe. Comprendi le definizioni dei membri, gli argomenti predefiniti e come il CTAD di C++17 ti permette di omettere gli argomenti template.

Template avanzati

  1. Specializzazione dei template e tag dispatch

    Padroneggia la specializzazione totale e parziale, impara quando è meglio ricorrere all'overloading e scopri il tag dispatch e if constexpr come alternative per la ramificazione a tempo di compilazione.

  2. Template variadici ed espressioni fold

    Gestisci un numero qualsiasi di argomenti template con i pack di parametri. Padroneggia le espressioni fold per elaborare i pack in modo elegante e senza ricorsione.

  3. SFINAE, type trait ed enable_if

    Comprendi il principio Substitution Failure Is Not An Error, usa i type trait per l'introspezione a tempo di compilazione e vincola i template con enable_if.

Programmazione generica moderna

  1. Concept e vincoli di C++20

    Definisci requisiti precisi sugli argomenti template usando i concept. Scrivi codice generico più pulito con le clausole requires, i template di funzione abbreviati e i concept della libreria standard.

  2. constexpr, consteval e programmazione a tempo di compilazione

    Sposta i calcoli dal runtime al tempo di compilazione usando constexpr, consteval e constinit. Costruisci tabelle di lookup, valida configurazioni e usa i contenitori constexpr.

  3. Pattern di metaprogrammazione con i template

    Padroneggia i pattern template avanzati: CRTP per il polimorfismo statico, design basato su policy per una composizione flessibile, type erasure per la genericità a runtime e criteri per scegliere tra template e dispatch virtuale.