Template per funzioni

Cominciata la lettura di C++ Templates: The Complete Guide, di cui si parlava nel post precedente.

Letto il capitolo introduttivo, in cui gli autori giustificano le loro convenzioni di scrittura del codice che dovremmo accettare in tutto il libro (e che a me sembrano un poco innaturali), e il capitolo due, che tratta i template per le funzioni.

Non male, il capitolo, spiegano le cose piuttosto bene, e scendendo in dettagli che in genere sono tralasciabili, ma comunque é bello sapere dove si può andare a vedere quando venga la necessità di rivederseli.

Qui riporto un piccolo esempio di base per una funzione templatizzata, la solita max(), giusto come riferimento.

Tipicamente definiamo un template per una funzione in questo modo:

template <typename T>
inline const T& myMax (const T& a, const T& b)
{
return a < b ? b : a;
}

In questo caso la funzione é inline, data la sua semplicità, e per mantenere le prestazioni di quella che é la controparte C, che é implementata come macro.

Il vantaggio del template C++ é che é type-safe e a prova di conflitti con le precedenze degli operatori (rimando al libro che sto leggendo per i dettagli).

Per vedere testare il codice ho scritto queste righe di codice:

int three = 3;
cout << "myMax<int> is " << myMax(three, 8) << endl;

string one("one");
string two("two");
cout << "myMax<string> is " << myMax(one, two) << endl;

In cui la mia funzione parametrizzata viene testata per interi e stringhe.

Che dire. Funziona.

Nessun commento:

Posta un commento