私は 10 年前は C++ の専門家でしたが、ここ 10 年間は Java をプログラミングしてきました。小さなサードパーティの XML パーサーを使用する C++ プロジェクトを開始しました。XML パーサーは、STL istream を受け入れます。私の XML データは Windows COM IStream から来ています。私は、Right Thing を実行して、IStream データを取得し、istream を介して XML パーサーに提示するアダプターを作成すると考えました。
http://www.mr-edd.co.uk/blog/beginners_guide_streambufの優れたチュートリアルに従い、基になる COM IStream からデータを取得する COMStreambuf を作成し、それをカスタム COMIstream のバッファーとして使用しました。すべて問題ないように見えますが、パーサーから読み取りエラーが発生します。
パーサーは、istream で seekg() を使用してファイル全体をメモリに読み込み、そのサイズを調べてから、seekg() で最初に戻って一度に読み込みます。当然のことながら、前述のチュートリアルでは、明らかに書かれたことのない「[シークの実装に関する指示] を別の投稿のために保存する」ことにしました。
カスタム istream/streambuf で seekg() を実装するために何をする必要があるか教えてもらえますか? 私は自分でそれをやってみようと思います (私の最初の傾向は、istream で何かをオーバーライドすることです) が、STL の深部での経験が浅く、Java のメンタリティがあるため、何か不完全なことをして脆弱な解決策になるのではないかと心配しています。(たとえば、チュートリアルを読まなければ、たとえば、新しい streambuf を記述してカスタム istream を作成したり、デフォルトのロケールで imbue() を呼び出す必要があるなどとは思いもしませんでした。)
助けてくれてありがとう。私はこのサイトに非常に感銘を受けました.---参加者の知識と、誰が最良の答えを持っているかを認める友好的で正直な性格の両方に. :)