なぜテンプレート引数をとるフレンド関数に同じテンプレートパラメータを使用できないのですか?私は下のコードがOKであることを意味する!演算子<<(ostream&os、...)テンプレートクラス
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();
}
しかし、この1つはOKではありません。どうして?何が問題ですか? (私はリンカエラーが発生します。)
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();
}
一つの友人はテンプレートで、他方がない。 – Xeo