Я пытаюсь перегрузить оператор 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 – 2010-12-04 02:20:02