数日前、私は先読みstreambufを使用するサブクラスを作成するのが楽しいだろうと決めました。mmap私のSTL(SGI)がどのように実装され、が含まれているfilebufことに気づいたかを調べました。したがって、から継承することは問題外です。basic_filebufFILE*basic_filebuf
だから私はから継承しましたbasic_streambuf。それから私は自分mmapbufをfstreamにバインドしたかった。
私がしなければならない唯一のことはfilebuf...の暗黙のインターフェースをコピーすることだと思いましたが、それは明らかな間違いでした。SGIでは、basic_fstreamを所有していbasic_filebufます。を呼び出しbasic_filestream.std::::ios::rdbuf( streambuf* )ても、ファイルストリームはそれを完全に無視し、独自のを使用しfilebufます。
だから今、私は少し混乱しています...確かに、私は自分自身を作成することができます、mmfstreamそれは正確なコピー/貼り付けになりますfstreamが、それは実際にはDRY指向ではないように聞こえます。
私が理解できないのは、なぜfstreamこれほど緊密に結合されているので、 ?filebuf以外のものを使用できないのかということです。filebufストリームとbufsを分離することの全体的なポイントは、異なるバッファーを持つストリームを使用できることです。
ソリューション:
=>filestreamの暗黙のインターフェースに依存する必要がありますfilebuf。つまり、fstreamはstreambufクラスによってテンプレート化する必要があります。これにより、の暗黙的なインターフェイスfstreamを実装している限り、誰もが独自のstreambufサブクラスをに提供できるようになります。問題:テンプレートテンプレートパラメーターとして使用しているときにテンプレートセレクターが破損するため、にfilebufテンプレートパラメーターを追加できません。fstreamfstream
=>filebuf追加の属性のない純粋な仮想クラスである必要があります。そのため、すべてのFILE*ガベージを実行せずに継承できます。
このテーマに関するあなたの考えは?