Funzioni template

Il linguaggio C++ permette di usare, insieme alla programmazione funzionale ed alla programmazione ad oggetti, anche il paradigma della programmazione generica.

La programmazione generia permette di scrivere delle funzioni che utilizzano un tipo generico, che sarà poi sostituito da un tipo specifico durante il loro utilizzo.

Nelle normali funzioni che conosciamo già, possiamo scrivere una funzione somma() che esegue la somma di due interi, un'altra che esegue la somma di due numeri decimali e così via.
Nella programmazione generica si scrive una sola funzione generica, che potrà essere utilizzata con più tipi.
Questo tipo di funzione è detto funzione template.

Una funzione template viene definita nel modo seguente:
template <class T>
T somma(T var1, T var2)
{
T risultato = var1 + var2;

return risultato;
}
La prima riga definisce il nome da utilizzare per il tipo generico.
Spesso si utilizza il nome T, ma virtualmente si può utilizzare qualsiasi nome.

La parola template indica che si sta andando a definire un template, mentre la parola class indica che si sta creando un tipo generico (una classe generica, nel linguaggio della programmazione ad oggetti) di nome T.
La parola class può essere sostituita dalla parola typename, a gusto del programmatore.
Io sinceramente preferisco utilizzare la parola typename dal momento che la parola class viene utilizzata per la definizione delle classi nella programmazione ad oggetti, ed utilizzare lo stesso termine per due scopi diversi può portare a confusione.

Nelle righe successive scriviamo la nostra funzione come abbiamo sempre fatto, tranne che invece di usare i tipi conosciuti utilizziamo il tipo generico T (o qualsiasi nome abbiate scelto).

Quando poi andremo ad utilizzare la funzione, il tipo T verrà sostituito con il tipo che utilizzeremo.
Infatti quello che abbiamo appena scritto è solo un template, non una funzione vera e propria.
La funzione vera e propria verrà creata dal compilatore in base a come richiameremo la funzione template.

Ad esempio nel momento in cui, all'interno del nostro programma, richiameremo la funzione somma passandole due argomenti int, il compilatore sostituirà al tipo T il tipo int:

int somma(int var1, int var2)
{
int risultato ...
...

Nessun commento:

Posta un commento