Я хотел бы создать пользовательский фасет, который будет применяться ко всему выводу потокового текста, и получить доступ к внутреннему расширяемому массиву оперируемого потока (т.е. через iword).
Если бы мне было интересно, чтобы пользовательский манипулятор строк работал с числами, я мог бы сделать что-то вроде того, что описано здесь:
C ++ пользовательский потоковый манипулятор, который изменяет следующий элемент в потоке
Если мне не нужен доступ к iosbase, я мог бы использовать метод docout codecvt, как описано здесь:
Как легко сделать отступ в ofstream?, но у меня нет доступа к ios_base потока внутри фасета codecvt (насколько я могу судить).
Есть ли способ определить пользовательский фасет, который будет вызываться на всех выходных данных потока, как в случае с codecvt, но где у меня есть доступ к ios_base& как обстоят дела с num_put? Есть ли способ получить доступ к потоку, к которому в настоящее время применяется фасет codecvt?
Возможно, у меня есть решение этого вопроса, но я не уверен, что такое политика / рекомендации по цитированию внешних ссылок / ссылок в stackExchange.
Я создал собственный объект streambuf (создавая ostream) который содержал вторичное хранилище для символов, которые были обработаны потоком.
Я посмотрел на ваш источник на github — и мне было интересно, могли бы вы, когда вы создаете свой indent_facet, передать поток в конструктор indent_facet; и затем используйте этот указатель, чтобы получить streambuf; и через что вторичный магазин?
Как я уже сказал, у меня есть гораздо более подробное описание того, о чем я думаю.
Спасибо,
Том