| Le funzioni o le classi template sono costruite in modo tale che possano operare con tipi generici. Cosa significa ? Consideriamo la nostra classe Vettore: essa e' disegnata per immagazzinare un set di numeri double. Ma cosa ci vieta di renderla più generale e fare in modo che sia in grado di contenere oggetti di tipo generico T ? Allo stesso modo possiamo pensare di generalizzare le funzioni che abbiamo scritto in modo che possano lavorare su oggetti generici. Considerate la funzione selection_sort: l'algoritmo di riordinamento è valido per qualunque tipo di oggetto per cui sia definita una relazione d'ordine tra due elementi. Vediamo un paio di esempi.
 
 Supponiamo di voler dichiarare una classe Vettore che al suo interno possa immagazzinare oggetti generici di tipo T . Nell'header file dovrò modificare la dichiarazione della classe in questo modo
  template  < typename T > class Vettore { ... };  mentre quando dovrò creare nel main un oggetto di tipo Vettore per immagazzinare dei double farò : Vettore < double > v;  L'istruzione indicata qui sopra crea effettivamente una istanza della classe Vettore specializzata per lavorare con dei double.
Analogamente se pensiamo per esempio alla funzione CalcolaMedia() possiamo scrivere template < typename T > double CalcolaMedia ( const Vettore< T > & v , unsigned int ndata ) {...} e possiamo quindi utilizzare la funzione CalcolaMedia nel main nel modo seguente :cout << "media    = " << CalcolaMedia< double >( v  ) << endl; Si possono trovare più dettagli a questo  link. 
 |