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 шт):

Автор решения: sibedir

Короче, не нужны эти лишние телодвижения. Так как ostream - это синоним basic_ostream<char,char_traits<char>>. И в любом контексте, включая наследование, ведёт себя так же.

Спасибо @Harry за пояснение в комментариях.

→ Ссылка
Автор решения: HolyBlackCat

Как правильно заметили, std::ostream - синоним std::basic_ostream<char>.

Можно зашаблонить <<, чтобы он принимал любой basic_ostream<...>, чтобы печатать например в "широкий" поток (с wchar_t символами). Насколько это полезно - другой вопрос.


Более интересная тема для размышлений - а нужны ли вообще ostream-ы в 202X, когда есть std::format (или libfmt). Возможно лучше учиться писать std::formatter-ы.

→ Ссылка