C++. Нужно ли перегружать operator<< над basic_ostream вместо ostream?
Даю возможность своему классу писать в ostream через оператор <<.
friend static std::ostream& operator<<(std::ostream& stream, const my_type& arg)
Но в принципе в будущем ведь может понадобится запись и в iostream. Да и в другие потоки, которые являются потомками basic_ostream<char, char_traits<char>>
Есть ли смысл сразу определить оператор:
friend static std::ostream& operator<<(std::basic_ostream<char, char_traits<char>>& stream, const my_type& arg)
?
Или это моветон и так не делают по каким-то причинам?
Ответы (2 шт):
Короче, не нужны эти лишние телодвижения. Так как ostream
- это синоним basic_ostream<char,char_traits<char>>
. И в любом контексте, включая наследование, ведёт себя так же.
Спасибо @Harry за пояснение в комментариях.
Как правильно заметили, std::ostream
- синоним std::basic_ostream<char>
.
Можно зашаблонить <<
, чтобы он принимал любой basic_ostream<...>
, чтобы печатать например в "широкий" поток (с wchar_t
символами). Насколько это полезно - другой вопрос.
Более интересная тема для размышлений - а нужны ли вообще ostream
-ы в 202X, когда есть std::format
(или libfmt). Возможно лучше учиться писать std::formatter
-ы.