Как мне создать фильтр Filter_streambuf на основе basic_streambuf? - PullRequest
0 голосов
/ 21 апреля 2010

У меня есть проект, который требует, чтобы я вставил фильтр в поток, чтобы исходящие данные были изменены в соответствии с фильтром.После некоторых исследований мне кажется, что я хочу создать фильтр Filter_streambuf следующим образом:

template <class StreamBuf>
class filtered_streambuf: public StreamBuf
{ ... }

И затем вставить filtered_streambuf<> в любой поток, который мне нужно отфильтровать.Моя проблема в том, что я не знаю, какие инварианты мне нужно поддерживать при фильтрации потока, чтобы гарантировать, что

  • Производные классы могут работать как положено.В частности, я могу обнаружить, что фильтр Filter_streambufs построен на основе других фильтров Filter_streambuf. * ​​1008 *
  • Все различные потоковые вставки, экстракторы и манипуляторы работают должным образом.Кажется, я не понимаю, какой минимальный интерфейс я должен предоставить, чтобы гарантировать, что iostream будет иметь то, что ему нужно для правильной работы.

    В частности, нужно ли имитировать движение защищенногопеременные указателя или нет?Нужен ли мне фальшивый буфер данных или нет?Могу ли я просто переопределить публичные функции, переписав их в терминах базового потокового буфера, или это слишком упрощенно?

1 Ответ

1 голос
/ 21 апреля 2010

Boost.Iostreams может быть полезно для вас.

Из документации:

Boost.Iostreams преследует три цели:

  • Чтобы упростить создание стандартных потоков C ++ и потоковых буферов для доступ к новым источникам и приемникам.
  • Для предоставления структуры для определения фильтров и их присоединения к стандартным потоки и потоковые буферы.
  • Предоставить коллекцию готовых к использованию фильтров, источников и Раковины.

Я сам почти не использовал эту библиотеку, поэтому больше не могу комментировать.

...