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

Contenuto cancellato Contenuto aggiunto
m +cat +sommario
Riga 185:
}
</source>
<br></br>
 
Va detto che tale metodo rappresentato è solo valido nel C++17. Un buon compilatore vi darà questo errore o simili se state utilizzando C++14 o precedenti: <i>"warning: fold-expressions only available with -std=c++17 or -std=gnu++17"</i>. Precedentemente l'espansione era più complessa e per mostrarla si utilizzerà una funzione <code>Print(...)</code> che stamperà a schermo i parametri (una sorta di <code>printf(char*, ...)</code> ma senza la stringa). Questo è il codice che attualmente utilizzeremo:
<source lang=cpp>
template <class ...Args>
void Print(Args&& ...args)
{
(cout << ... << args);
}
</source>
Fino al C++17 invece si utilizzava questo codice
<source lang=cpp>
template <class Arg>
void Print(Arg&& arg)
{
cout << arg;
}
 
template <class Arg, class ...Args>
void Print(Arg&& arg, Args&& ...args)
{
cout << arg;
Print(args...);
}
</source>
O volendo semplificare, post C++11:
<source lang=cpp>
template <class Arg, class ...Args>
void Print(Arg&& arg, Args&& ...args)
{
cout << arg;
if constexpr(0 != sizeof...(args))
Print(args...);
}
</source>
Comunque più complessa e ricorsiva.