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.
codice:
template<class T> class Test {
friend ostream& operator<<(ostream& os, const Test<T>& t);
}
La soluzione che ho scritto io è questa e funziona (dichiara la funzione un template):
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);
}
Ma girando in rete ho trovato anche questa:
codice:
template<class T> class Test {
friend ostream& operator<<(ostream& os, const Test& t) {
/* fa qualcosa */
return os;
}
};
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é?
Quale delle due è preferibile usare e perché?
Grazie in anticipo.