0

std::ostringstreamを一時バッファとして使用する既存のコードがいくつかあります。堅牢性を高めるために、バッファーサイズの上限(16 KBなど)を定義したいと思います。制限を超えた場合、追加された後続のすべてのデータは黙って破棄する必要があります。理想的には、警告をログに記録した後。

それを行う最も簡単な方法は何ですか?std::ofstream現在のサイズを取得する効率的な方法がないようです。私は考えることができるだけでmy_stream.str().size()、それは非常に非効率的であるように思われます。

もちろん、追加のカウンターを保持することで、挿入された文字の数を手動で追跡できますが、私が見逃しているエレガントな代替手段があるかもしれません。交換可能ofstringstreamな内部バッファ( )があるのを見ました。rdbuf()

私の問題を解決するためにそれを使用することは可能(そして実用的)ですか?

4

1 に答える 1

4

考えられる解決策の1つは、stringbufを独自のクラスに拡張し、それを内で使用することですofstringstream。次に、最大制限を実装するのは簡単なはずです。stringbuf::overflowオーバーロードしたい関数のようです。

または、書き込む前にstd::ostringstreamチェックする別のクラス内でラップすることもできます。sizeこれは非効率的であるとどのように結論付けますか?サイズがすべての呼び出しで計算されない限り、それは間接参照をナビゲートするだけの問題です。

編集:リファレンスの「コピー」という単語を見逃しましたが、はい、一度ラップすると、独自のカウンターを保持できます。

tellpまたは、常に最後を指している限り、何文字が書き込まれているかを確認するために使用することもできます。

戻り値
出力シーケンスの先頭から現在の位置までの文字数を含むstreampos型の整数値。

于 2013-01-09T02:01:09.687 に答える