Ciao a tutti,
un codice di questo tipo dà warning (friend declaration declares a non-template function) che indica che la funzione friend non è un template.
La soluzione che ho scritto io è questa e funziona (dichiara la funzione un template):codice:template<class T> class Test { friend ostream& operator<<(ostream& os, const Test<T>& t); }
Ma girando in rete ho trovato anche questa:codice:template<class U> ostream& operator<<(ostream& os, const Test<U>& t) { /* fa qualcosa */ return os; } template<class T> class Test { template<class U> friend ostream& operator<<(ostream& os, const Test<U>& t); }
E non mi è chiaro come possa funzionare. In base a ciò che so non dovrebbe essere un template e quindi non funzionare, ma a quanto pare sì. Qualcuno mi sa spiegare perché?codice:template<class T> class Test { friend ostream& operator<<(ostream& os, const Test& t) { /* fa qualcosa */ return os; } };
Quale delle due è preferibile usare e perché?
Grazie in anticipo.

Rispondi quotando