Я не уверен, что то, что вы хотите сделать, возможно. Операторы <<
не являются виртуальными. Таким образом, вы можете определить yourstream &operator << (yourstream &strm, int i)
, чтобы делать то, что вы хотите, с помощью преобразования и счета в обратном порядке, и это будет работать, когда ваш код вызывает его напрямую. Но если вы передадите объект вашего потока в функцию, которая ожидает ostream, каждый раз, когда эта функция вызывает <<
, она перейдет к исходной версии ostream вместо вашей.
Насколько я понимаю, средства потоков были настроены так, что вы можете "легко" определить новый тип потока, который использует другой тип буфера (например, набор символов), и вы можете очень легко добавить поддержку для вывода ваших собственных классов через <<
. Я не думаю, что вы намерены переопределить средний слой между ними.
И, в частности, весь смысл интерфейса <<
состоит в том, чтобы обеспечить красиво отформатированный текстовый вывод, в то время как кажется, что вы действительно хотите двоичный вывод. (В противном случае ссылка на «endian» не имеет смысла.) Даже если предположить, что есть какой-то способ сделать это, я не знаю, он в лучшем случае даст неловкий двоичный вывод. Например, рассмотрим перегрузку конечного пользователя для вывода точки в трехмерном пространстве. Версия конечного пользователя <<
, вероятно, будет делать что-то вроде << '(' << x << ", " << y << ", " << z << ')'
. Это будет хорошо смотреться в текстовом потоке, но в двоичном потоке много потраченных впустую и совершенно бесполезных символов, которые в идеале просто используют << x << y << z
. (А сколько звонков на номер <<
должно учитываться?)