0

我有一个迭代算法,用 C++ 编写。我正在使用yaml-cpp。在每次迭代中,我发送一些数据到 YAML::Emitter 对象。当算法终止时,我使用 YAML::Emitter::c_str() 将底层缓冲区写入 ofstream。

但是,我更愿意每隔几百次迭代将缓冲区写入文件,并在每次增量时从 YAML::Emitter 对象中清除写入的数据。有两个原因:

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 回答