Condividi tramite


Modelli di funzione

I modelli della classe definisce un gruppo di classi correlate basate sugli argomenti di tipo passati alla classe sulla creazione di istanze.I modelli di funzione sono simili ai modelli della classe ma definiscono una famiglia di funzioni.Con i modelli di funzione, è possibile specificare un insieme di funzioni basati sullo stesso codice ma tale operazione su tipi o in classi diverse.Il modello di funzione scambia due elementi:

// function_templates1.cpp
template< class T > void MySwap( T& a, T& b ) {
   T c(a); 
   a = b; 
   b = c;
}
int main() {
}

Questo codice definisce una famiglia di funzioni che si scambiano i valori degli argomenti.Da questo modello, è possibile generare funzioni che scambiano int e tempo tipi e anche tipi definiti dall'utente.MySwap anche interscambierà classi se il costruttore di copia e l'operatore di assegnazione di classe vengono definiti correttamente.

Inoltre, il modello di funzione impedirà di scambiare oggetti di tipi diversi, poiché il compilatore riconosce i tipi di a e b parametri in fase di compilazione.

Sebbene questa funzione può essere eseguita da una funzione nontemplated, utilizzando i puntatori a void, la versione del modello sia indipendente dai tipi.considerare le seguenti chiamate:

int j = 10;
int k = 18;
CString Hello = "Hello, Windows!";
MySwap( j, k );          //OK
MySwap( j, Hello );      //error

il secondo MySwap la chiamata attiva un errore in fase di compilazione, in quanto il compilatore non può generare un'eccezione MySwap funzione con parametri di tipi diversi.Se i puntatori a void venisse utilizzato, entrambe le chiamate di funzione saranno compilati correttamente, ma la funzione non funzionerebbe correttamente in fase di esecuzione.

La specifica esplicita degli argomenti di template per un modello di funzione non è consentita.Di seguito è riportato un esempio:

// function_templates2.cpp
template<class T> void f(T) {}
int main(int j) {
   f<char>(j);   // Generate the specialization f(char).
   // If not explicitly specified, f(int) would be deduced.
}

Quando l'argomento di modello viene specificato in modo esplicito, le conversioni implicite di normale vengono effettuate per convertire l'argomento della funzione al tipo dei parametri corrispondenti di modello di funzione.Nell'esempio precedente, il compilatore converte (char j) per immettere int.

Vedere anche

Riferimenti

Creazione di un'istanza del template di funzione

Creazione di istanza esplicita

Specializzazione esplicita di template di funzione

Altre risorse

Modelli