Применить фасет ко всему потоку вывода, использовать пользовательские строковые манипуляторы

Я хотел бы создать пользовательский фасет, который будет применяться ко всему выводу потокового текста, и получить доступ к внутреннему расширяемому массиву оперируемого потока (т.е. через iword).

Если бы мне было интересно, чтобы пользовательский манипулятор строк работал с числами, я мог бы сделать что-то вроде того, что описано здесь:
C ++ пользовательский потоковый манипулятор, который изменяет следующий элемент в потоке

Если мне не нужен доступ к iosbase, я мог бы использовать метод docout codecvt, как описано здесь:
Как легко сделать отступ в ofstream?, но у меня нет доступа к ios_base потока внутри фасета codecvt (насколько я могу судить).

Есть ли способ определить пользовательский фасет, который будет вызываться на всех выходных данных потока, как в случае с codecvt, но где у меня есть доступ к ios_base& как обстоят дела с num_put? Есть ли способ получить доступ к потоку, к которому в настоящее время применяется фасет codecvt?

1

Решение

Возможно, у меня есть решение этого вопроса, но я не уверен, что такое политика / рекомендации по цитированию внешних ссылок / ссылок в stackExchange.

Я создал собственный объект streambuf (создавая ostream) который содержал вторичное хранилище для символов, которые были обработаны потоком.

Я посмотрел на ваш источник на github — и мне было интересно, могли бы вы, когда вы создаете свой indent_facet, передать поток в конструктор indent_facet; и затем используйте этот указатель, чтобы получить streambuf; и через что вторичный магазин?

Как я уже сказал, у меня есть гораздо более подробное описание того, о чем я думаю.

Спасибо,

Том

0

Другие решения


По вопросам рекламы [email protected]