могу ли я специализироваться на операторе <<? - PullRequest
2 голосов
/ 20 июля 2010

Я хочу специализировать operator <<, но этот код не компилируется; </p>

template<>

std::ostream& operator<< < my_type >( std::ostream& strm, my_type obj);

Ответы [ 2 ]

2 голосов
/ 20 июля 2010

Чтобы специализировать шаблон, сначала вы должны объявить шаблон.

В случае свободного 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>& );

)

2 голосов
/ 20 июля 2010

Почему бы просто не перегрузить?

// no template <>
std::ostream& operator<<( std::ostream& strm, my_type obj);

Вы специализируетесь, только если существует шаблон до , специализирующийся.

Ваш параметр, вероятно, должен быть const my_type&, чтобы избежать ненужного копирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...