我有一个用C ++编写的迭代算法。我正在使用yaml-cpp。在每次迭代中,我发送一些数据到YAML :: Emitter对象。当算法终止时,我使用YAML :: Emitter :: c_str()将底层缓冲区写入ofstream。
但是,我宁愿每隔几百次迭代逐步将缓冲区写入文件,并且每次增加都会清除YAML :: Emitter对象的写入数据。这有两个原因:
1)如果程序意外终止,我希望能够访问(尽可能多)磁盘上的输出。
2)YAML :: Emitter对象自我扩展,我不想浪费内存。
最好的方法是什么?
答案 0 :(得分:0)
听起来你想要YAML::Emitter
的可插拔“作家” - 如果是这样,请在http://code.google.com/p/yaml-cpp/issues/list提交功能请求。
(我不能保证我能多快得到它,但我也乐意接受补丁。)
与此同时,您可以对发射器的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();
}