Cerca nel sito:
ricerca
avanzata

Frasi Celebri...

Nessuno mi ha mai detto che il rimpianto si sente come la paura.

Clive Staples Lewis 

Sondaggio:

Quale genere musicale preferisci?

latino americana
dance
rock
hip pop
heavy metal
techno
classica
leggera

visualizza risultati


 

Funzioni template

 

Oltre a classi template e` possibile avere anche funzioni template, utili quando si vuole definire solo un'operazione e non un tipo di dato, ad esempio la libreria standard definisce la funzione min piu` o meno in questo modo:


  template < typename T >
  T& min(T& A, T& B) {
    return (A < B)? A : B;
  }


Si noti che la definizione richiede implicitamente che sul tipo T sia definito operator <. In questo modo e` possibile calcolare il minimo tra due valori senza che sia definita una funzione min specializzata:


  int main(int, char* []) {
    int A = 5;
    int B = 10;

    int C = min(A, B);

    TMyClass D(/* ... */);
    TMyClass E(/* ... */);

    TMyClass F = min(D, E);

    /* ... */
    return 0;
  }


Ogni qual volta il compilatore trova una chiamata alla funzione min istanzia (se non era gia stato fatto prima) la funzione template (nel caso delle funzioni l'istanziazione e` un processo totalmente automatico che avviene quando il compilatore incontra una chiamata alla funzione template producendo una nuova funzione ed effettuando una chiamata a tale istanza. In sostanza con un template possiamo avere tutte le versioni overloaded della funzione min che ci servono con un'unica definizione.
Si osservi che affinche la funzione possa essere correttamente istanziata, i parametri del template devono essere utilizzati nella lista dei parametri formali della funzione in quanto il compilatore istanzia le funzioni template sulla base dei parametri attuali specificati al momento della chiamata:


  template < typename T > void F1(T);
  template < typename T > void F1(T*);
  template < typename T > void F1(T&);
  template < typename T > void F1();            // Errore
  template < typename T, typename U > void F1(T, U);
  template < typename T, typename U > int F1(T);// Errore


Questa restrizione non esiste per le classi template, perche` gli argomenti del template vengono specificati esplicitamente ad ogni istanziazione.

 

successivo
–«  INDICE  »–

 

 

 

 
Powered by paper&pencil (carta&matita ) - Copyright © 2001-2019 Cataldo Sasso