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

Contenuto cancellato Contenuto aggiunto
Nuova pagina: ==I Template== I Template sono utilizzati in C++ nella metaprogrammazione, ovvero nella scrittura di codice generico e modificabile dal programma stesso. L'aspetto più importante...
 
Riga 65:
}
</source>
<b>args</b> è un pacchetto, come T. Il primo è un pacchetto di argomenti, mentre T di tipi. <b>sizeof...()</b> permette di sapere quanti argomenti contenga. La scrittura <b>(args + ...)</b> permette di espandere il pacchetto in (((arg1 + arg2) + arg3) + ...). Anche qui possiamo ricavare errori, prima dall'uso dell'operatore + e poi dal cast a <i>long double</i>. Per quanto riguarda il secondo, ci basta utilizzare in nuovo <b>auto</b> del C++11:
<source lang=cpp>
template <class ...T>
auto Sum(T ...args)
{
static_assert(1 < sizeof...(args), "Almeno due valori richiesti");
return (args + ...);
}
</source>
Qui il tipo di ritorno è dedotto alla fine. Ora è addirittura possibile sommare stringhe!
<source lang=cpp>
int main()
{
// stringhe C++, non stringhe NUL terminated!
cout << Sum(static_cast<std::string>("Ciao "), "mondo");
}
</source>