Module lessons (1/2)
Function Templates
I Templates (Modelli) consentono di scrivere codice generico in C++. Attraverso i template, possiamo definire funzioni o classi che operano su dei parametri di tipo generici, lasciando che sia il compilatore a generare il codice effettivo per i tipi specifici richiesti.
Definizione di una Funzione Template
Per definire una funzione template, facciamo precedere la definizione della funzione dalla parola chiave template, seguita dall'elenco dei parametri di tipo racchiusi tra parentesi angolari <>. Si usa comunemente typename o class per dichiarare un tipo generico.
// T è il parametro di tipo generico
template <typename T>
T add(T a, T b) {
return a + b;
}
Chiamata di Funzione ed Overload Resolution
Quando richiamiamo la funzione, possiamo specificare esplicitamente il tipo tra parentesi angolari:
int res1 = add<int>(5, 10);
double res2 = add<double>(3.14, 2.71);
Tuttavia, il compilatore C++ è solitamente in grado di dedurre il tipo automaticamente dai parametri passati in ingresso (Template Argument Deduction):
int res1 = add(5, 10); // Il compilatore deduce che T è int
Prova tu
Definisci una funzione template chiamata myMax che accetta due parametri del tipo generico T e ritorna il maggiore tra i due.
Show hint
Inizia scrivendo `template <typename T>` seguito dalla firma `T myMax(T a, T b)`.
Solution available after 3 attempts
Scrivi una funzione template printPair che accetta due parametri di tipi generici differenti T1 e T2 e stampa a schermo i due argomenti separati da uno spazio usando std::cout.
Show hint
La dichiarazione del template deve specificare due parametri: `template <typename T1, typename T2>`.
Solution available after 3 attempts