Чтобы специализировать шаблон, сначала вы должны объявить шаблон.
В случае свободного operator<<
вам не нужен шаблон;вы можете просто перегрузить его для вашего my_type
класса:
std::ostream& operator<<( std::ostream& strm, my_type obj );
Если ваш объект не является тривиальным по размеру, вы можете рассмотреть возможность передачи по константной ссылке, чтобы не копировать его каждый развремя его потоковой передачи:
std::ostream& operator<<( std::ostream& strm, const my_type& obj );
(Технически вы можете явно специализировать operator<<
, но я не думаю, что это то, что вам нужно или нужно. Чтобы можно было использовать оператор шаблона<< с обычным синтаксисом << необходимо сделать специализацию шаблона выводимой из одного из типов параметров. </p>
Например:
// template op <<
template< class T >
std::ostream& operator<<( std::ostream&, const MyTemplClass<T>& );
// specialization of above
template<>
std::ostream& operator<< <int>( std::ostream&, const MyTemplClass<int>& );
)