Informatica 2 Liceo Scientifico Scienze Applicate/Template: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Riga 53:
</source>
 
==Template Argument Deduction==
==Problemi con i Template==
Quando è possibile dedurre il tipo è possibile evitare le chiamate descritte sopra e semplificarle:
I Template hanno dei problemi. Il primo è che niente vieta di chiamare una funzione che utilizza certi operatori o certe funzioni membro. Ad esempio chiamate del tipo
<source lang=cpp>
int main()
{
cout << Sum<int*, int*>(0x01, 0x09.78) << endl;
}
</source>
Il compilatore è in grado di dedurre i tipi automaticamente, senza specificarli. Alcuni Template richiedono però un tipo obbligatoriamente, come <code>std::function<></code> ma anche <code>std::declval<>()</code>. Questo accade quando ad esempio il tipo (o tipi) ignoto è il tipo di ritorno e non vi sono parametri che lo facciano dedurre.
mettono in crisi il nostro compilatore, non tanto per gli indirizzi <code lang=cpp>nullptr</code>, ma perché tenta di chiamare <code lang=cpp>(int*).operator+(int*)</code>, che non esiste. Non abbiamo quindi sicurezza per quanto riguarda i tipi. Il secondo è che il compilatore è costretto a creare una funzione per ogni tipo che chiamiamo, il che produce codice molto ridondante.
Sfortunatamente
 
==Template Argument Deduction==