4

私のプロジェクトには抽象クラスがあり、その派生物はさまざまな場所への入出力に使用されます。仮想メソッドreadおよびwriteがあります。

virtual unsigned read(void *buf, unsigned len) = 0;
virtual void write(const void *buf, unsigned len) = 0;

入力/出力をこれらのメソッドにリダイレクトするには、std ストリーム (std::istream および std::ostream) とこのクラスの間に一種のアダプターが必要です。

たとえば、

mystream << "some output";

が呼び出されると、writeメソッドが呼び出されます。

std::istreamstd::ostreamまたはstd::streambufをオーバーロードする必要があると思いますが、どのメソッドかわかりません。

これを実装するより良い方法は何ですか?

4

3 に答える 3

4

シンプルだが柔軟ではない方法がたくさんあります。これらのソリューションのほとんどは、istreamまたはを活用しませんostream。たとえば、<<演算子のオーバーロードは 1 つの方法です。欠点は、すべての通常の型、およびすべての標準マニピュレータなどに対してこの演算子を実装する必要があることです。大きな負担になることもあります。

これは悲しいことです。 istreamandに関するすべては、入力や出力を行うのではなく、解析してフォーマットostreamすることだけだからです。I/Oの責任は に与えられます。そして、あなたのタスクは、あなたとメソッドを使用するカスタム実装を必要とします。streambufstreambufreadwrite

この議論は、stackoverflow の回答のような小さな形式には長すぎますが、次の参考文献で適切な指針を見つけることができます。

参考文献

ノート

アドバイスどおり、boost.iostreams を使用するのが適切かもしれませんが、私はそれを十分に知りません。

于 2015-09-15T15:10:37.833 に答える
2

boost iostreams ライブラリを参照してください。カスタム ソースとシンク (入力デバイスと出力デバイス) を使用して iostream を簡単に定義できるフレームワークを提供します。

于 2015-09-15T14:48:37.620 に答える