Perché non è possibile utilizzare lo stesso parametro modello per una funzione amico che accetta un argomento modello? Voglio dire che il codice qui sotto è OK!<< (ostream & os, ...) per modello classe
template <class Vertex>
class Edge
{
template <class T>
friend ostream& operator<<(ostream& os, const Edge<T>& e);
/// ...
};
template <class T>
ostream& operator<<(ostream& os, const Edge<T>& e)
{
return os << e.getVertex1() << " -> " << e.getVertex2();
}
Ma questo NON è ok. Perché? Qual è il problema? (Ottengo l'errore del linker.)
template <class Vertex>
class Edge
{
friend ostream& operator<<(ostream& os, const Edge<Vertex>& e);
/// ...
};
template <class T>
ostream& operator<<(ostream& os, const Edge<T>& e)
{
return os << e.getVertex1() << " -> " << e.getVertex2();
}
Un amico è un modello, l'altro è non. – Xeo