0Pricing
C++ Academy · Lezione

Ripasso dei template di funzioni e classi

Scriva funzioni e classi generiche con la sintassi corretta dei template

Ripasso dei template di funzioni e classi è una lezione C++ Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C++ Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C++ Academy include 4 lezioni in totale.

Perché utilizzare i template?

I template permettono di scrivere il codice una sola volta e di fare in modo che il compilatore generi versioni specifiche per ogni tipo utilizzato. Sono un pilastro della programmazione generica.

Sintassi dei function template

Dichiari i parametri di tipo con template <typename T>. Utilizzi T nella firma della funzione.

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

std::cout << max_of(3, 7);          // int
std::cout << max_of(2.5, 1.5);      // double

typename e class

Le parole chiave typename e class sono intercambiabili nelle dichiarazioni dei parametri dei template. typename è più comune nello stile moderno.

Più parametri di tipo

I template possono avere più parametri di tipo.

template <typename T, typename U>
auto combine(T a, U b) -> decltype(a + b) {
    return a + b;
}

Parametri non di tipo

I parametri dei template possono essere anche valori non di tipo: interi, enumerazioni e puntatori.

template <typename T, size_t N>
struct StaticArray {
    T data[N];
};

StaticArray<int, 10> arr;

Class template

Le classi generiche utilizzano la stessa sintassi dei template. Utilizzi il parametro di tipo per i membri e i metodi.

template <typename T>
class Stack {
    std::vector<T> data_;
public:
    void push(T x) { data_.push_back(std::move(x)); }
    T pop()        { T t = std::move(data_.back()); data_.pop_back(); return t; }
};

Stack<int> s1;
Stack<std::string> s2;

Funzioni membro al di fuori della classe

Le definizioni al di fuori della classe richiedono il prefisso del template per ogni membro.

template <typename T>
class Stack {
public:
    void push(T x);
};

template <typename T>
void Stack<T>::push(T x) {
    data_.push_back(std::move(x));
}

Argomenti predefiniti dei template

Funzionano come gli argomenti predefiniti delle funzioni. Vengono utilizzati quando il chiamante non specifica alcun valore.

template <typename T = int>
class Box {
    T value;
};

Box<> b;       // T is int

Deduzione degli argomenti dei template

Il compilatore deduce spesso gli argomenti dei template dalla chiamata.

template <typename T>
void print(T x) { std::cout << x; }

print(42);          // T deduced as int
print("hello");    // T deduced as const char*
print<double>(3);   // explicit

Deduzione degli argomenti dei class template (C++17)

C++17 permette di omettere gli argomenti dei class template quando possono essere dedotti dal costruttore.

std::pair p(1, 2.5);            // pair<int, double>
std::vector v{1, 2, 3};         // vector<int>

Lookup in due fasi

Nei template il lookup avviene in due fasi: durante la definizione (per i nomi non dipendenti) e durante l'istanziazione (per i nomi dipendenti). Questo permette di rilevare molti errori già al momento della definizione.

Messaggi di errore

Gli errori nei template possono intimidire. Legga il messaggio dal basso verso l'alto, si concentri sulla posizione nel codice sorgente e utilizzi i concepts di C++20 per migliorare la diagnostica.

Verifica rapida

Quale funzionalità permette di compilare std::vector v{1, 2, 3}; senza specificare std::vector<int>?

Riepilogo

I template generano codice specifico per il tipo durante la compilazione. Definisca function template e class template con template <typename T>. Il compilatore deduce gli argomenti quando possibile; li specifichi esplicitamente quando necessario.

Domande Frequenti

La lezione «Ripasso dei template di funzioni e classi» è gratuita?

Sì — il testo completo di «Ripasso dei template di funzioni e classi» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C++ Academy, passa a CoddyKit PRO. Il corso C++ Academy include 4 lezioni in totale.

Cosa imparerò in «Ripasso dei template di funzioni e classi»?

Scriva funzioni e classi generiche con la sintassi corretta dei template Eserciti C++ Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare C++ Academy?

Non è richiesta alcuna esperienza precedente. C++ Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.

Quanto tempo richiede la lezione «Ripasso dei template di funzioni e classi»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione C++ Academy?

Sì. Ogni lezione C++ Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Ripasso dei template di funzioni e classi
  2. Specializzazione parziale e completa dei template
  3. Template variadici e parameter pack
  4. Funzioni constexpr e if constexpr
← Torna a C++ Academy