Estoy intentando sobrecargar el operador ostream para permitir la salida de una clase anidada dentro de una plantilla. Sin embargo, el compilador no puede vincular la llamada de función real a mi sobrecarga.Genere una clase anidada dentro de una plantilla
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
}
Esto compilará si defino como la sobrecarga de una función en línea friend
:
template <class T>
struct foo
{
struct bar
{
friend std::ostream& operator << (std::ostream& os, const bar& b)
{
return os;
}
};
};
pero prefiero definir la sobrecarga fuera de la clase. es posible?
Ver http://stackoverflow.com/questions/4092237/c-nested-class-of-a-template-class –