У меня есть проект, который требует, чтобы я вставил фильтр в поток, чтобы исходящие данные были изменены в соответствии с фильтром.После некоторых исследований мне кажется, что я хочу создать фильтр Filter_streambuf следующим образом:
template <class StreamBuf>
class filtered_streambuf: public StreamBuf
{ ... }
И затем вставить filtered_streambuf<>
в любой поток, который мне нужно отфильтровать.Моя проблема в том, что я не знаю, какие инварианты мне нужно поддерживать при фильтрации потока, чтобы гарантировать, что
- Производные классы могут работать как положено.В частности, я могу обнаружить, что фильтр Filter_streambufs построен на основе других фильтров Filter_streambuf. * 1008 *
- Все различные потоковые вставки, экстракторы и манипуляторы работают должным образом.Кажется, я не понимаю, какой минимальный интерфейс я должен предоставить, чтобы гарантировать, что iostream будет иметь то, что ему нужно для правильной работы.
В частности, нужно ли имитировать движение защищенногопеременные указателя или нет?Нужен ли мне фальшивый буфер данных или нет?Могу ли я просто переопределить публичные функции, переписав их в терминах базового потокового буфера, или это слишком упрощенно?