0

送信データがフィルターに従って変更されるように、ストリームにフィルターを挿入する必要があるプロジェクトがあります。いくつかの調査の後、私がやりたいのは次のようなfiltered_streambufを作成することのようです。

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

次に、filtered_streambuf<>フィルタリングする必要のあるストリームにを挿入します。私の問題は、ストリームをフィルタリングするときに維持する必要のある不変条件がわからないことです。

  • 派生クラスは期待どおりに機能します。特に、filtered_streambufsが他のfiltered_streambufsの上に構築されていることに気付く場合があります。
  • さまざまなストリームインサーター、エクストラクター、マニピュレーターはすべて期待どおりに機能します。

問題は、iostreamが正しく機能するために必要なものを確実に持つために、提供する必要のある最小限のインターフェイスが何であるかを理解できないように見えることです。

特に、保護されたポインター変数の動きを偽造する必要がありますか?偽のデータバッファが必要ですか?パブリック関数をオーバーライドして、ベースstreambufの観点から書き直すことはできますか、それとも単純すぎますか?

4

1 に答える 1

1

Boost.Iostreamsはあなたに役立つかもしれません。

ドキュメントから:

Boost.Iostreamsには3つの目的があります。

  • 新しいソースとシンクにアクセスするための標準のC++ストリームとストリームバッファを簡単に作成できるようにするため。
  • フィルタを定義し、それらを標準ストリームおよびストリームバッファに接続するためのフレームワークを提供するため。
  • すぐに使用できるフィルター、ソース、シンクのコレクションを提供します。

私はそのライブラリをほとんど使用していないので、これ以上コメントすることはできません。

于 2010-04-21T00:23:14.283 に答える