0

私はC++で書かれた反復アルゴリズムを持っています。私はyaml-cppを使用しています。反復ごとに、YAML::Emitterオブジェクトにデータを送信します。アルゴリズムが終了したら、YAML :: Emitter :: c_str()を使用して基になるバッファーをofstreamに書き込みます。

ただし、バッファをファイルに数百回の反復ごとに増分的に書き込み、増分ごとにYAML::Emitterオブジェクトから書き込まれたデータをクリアすることをお勧めします。これには2つの理由があります。

1)プログラムが予期せず終了した場合に備えて、ディスク上の出力に(可能な限り)アクセスできるようにしたい。

2)YAML :: Emitterオブジェクトは自己拡張し、メモリを無駄にしたくありません。

これについて行くための最良の方法は何ですか?

4

1 に答える 1

0

プラグ可能な「ライター」が必要なようです。その場合は、 http://code.google.com/p/yaml-cpp/issues/listYAML::Emitterで機能リクエストを提出してください。

(どれだけ早く到達できるかは保証できませんが、パッチも喜んで受け入れます。)

それまでの間、エミッターc_str()size()メソッドをタグチーム化して、ほぼ必要なことを実行できます(エミッターのメモリーをクリアすることを除くすべて)。

YAML::Emitter emitter;
std::size_t bytesWritten = 0;
while(1) {
   fetch_more_data(emitter);
   file.append(emitter.c_str() + bytesWritten);
   bytesWritten = emitter.size();
}
于 2011-06-08T18:29:47.370 に答える