Написание фильтра ostream? - PullRequest
       6

Написание фильтра ostream?

4 голосов
/ 25 апреля 2010

Я хотел бы написать простой ostream, который оборачивает аргумент ostream и каким-то образом изменяет поток перед передачей его в поток аргументов. Преобразование - это что-то простое, например, изменение буквы или удаление слова

Как будет выглядеть простой класс, унаследованный от ostream? Какие методы мне следует переопределить?

Ответы [ 3 ]

2 голосов
/ 25 апреля 2010

std::ostream не лучшее место для реализации фильтрации. У него нет соответствующих виртуальных функций, чтобы позволить вам сделать это.

Возможно, вы захотите написать класс, производный от std::streambuf, содержащий обернутый std::ostream (или обернутый std::streambuf), а затем создать std::ostream, используя этот std::streambuf.

std::streambuf имеет виртуальную функцию overflow, которую вы можете переопределить и использовать для изменения байтов перед передачей их в упакованный выходной класс.

0 голосов
/ 30 апреля 2012

Рассмотрите возможность использования Boost.Iostreams

0 голосов
/ 25 апреля 2010

Я всегда думал, что написание специализированных потоков - неправильный подход почти к любой проблеме. Выходной поток обычно является конечной точкой в ​​вашей программе - любая обработка данных должна выполняться задолго до того, как вы попадете в сам поток. Точно так же для входных потоков - размещение интеллекта, необходимого для (скажем) анализа входных данных в потоке, помещает его в неправильное место. Только мои 2 цента, конечно.

...