Operador de sobrecarga << para modelo de classe aninhada
Eu tenho a seguinte configuração:
template< class T >
struct Foo {
struct Bar {
Bar ( const T &t ) : otherT_( t ) {}
T otherT_;
};
Foo ( const T &t ) : myT_( t ) {}
T myT_;
};
Agora, quero fazer exemplos deFoo< T >::Bar
Streamable para std :: cout e amigos. Eu tentei isso:
template< class T >
std::ostream& operator<< ( std::ostream &os,
const typename Foo< T >::Bar &bar ) {
os << "<bar: " << bar.otherT_ << ">";
return os;
}
Mas o código a seguir não compila:
Foo< int > foo( 5 );
Foo< int >::Bar bar( 7 );
std::cout << bar << std::endl;
Eu acho que o compilador não é capaz de deduzir o tipoT
ou alguma coisa. Existe uma maneira de fazer com que tais instâncias da classe aninhada se comportem bem comoperator<<
?
Obrigado!