Оператор перегрузки << для вложенного шаблона класса
У меня есть следующие настройки:
template< class T >
struct Foo {
struct Bar {
Bar ( const T &t ) : otherT_( t ) {}
T otherT_;
};
Foo ( const T &t ) : myT_( t ) {}
T myT_;
};
Теперь я хочу сделать примерыFoo< T >::Bar
пригодный для std :: cout и друзей. Я попробовал это:
template< class T >
std::ostream& operator<< ( std::ostream &os,
const typename Foo< T >::Bar &bar ) {
os << "<bar: " << bar.otherT_ << ">";
return os;
}
Но следующий код не компилируется:
Foo< int > foo( 5 );
Foo< int >::Bar bar( 7 );
std::cout << bar << std::endl;
Я думаю, что компилятор не может вывести типT
или что-то. Есть ли способ заставить такие экземпляры вложенного класса вести себя хорошо сoperator<<
?
Спасибо!