ostream演算子をオーバーロードして、テンプレート内の入れ子クラスの出力を許可しようとしています。しかし、コンパイラは実際の関数呼び出しを私のオーバーロードにバインドすることはできません。テンプレート内に入れ子クラスを出力する
template <class T>
struct foo
{
struct bar { };
};
template <class T>
std::ostream& operator << (std::ostream& os,
const typename foo<T>::bar& b)
{
return os;
}
int main()
{
foo<int>::bar b;
std::cout << b << std::endl; // fails to compile
}
私はインラインfriend
機能として、過負荷を定義する場合、これがコンパイルされます:
template <class T>
struct foo
{
struct bar
{
friend std::ostream& operator << (std::ostream& os, const bar& b)
{
return os;
}
};
};
しかし、私はむしろ、クラスの外に過負荷を定義すると思います。これは可能ですか?
http://stackoverflow.com/questions/4092237/c-nested-class-of-a-template-classを参照してください。 –