【问题标题】:YAML::Emitter stream sizeYAML::发射器流大小
【发布时间】:2011-06-08 16:49:14
【问题描述】:

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

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

1) 如果程序意外终止,我希望能够访问(尽可能多地)磁盘上的输出。

2) YAML::Emitter 对象自扩展,我不想浪费内存。

最好的方法是什么?

【问题讨论】:

    标签: c++ file-io yaml ostream yaml-cpp


    【解决方案1】:

    听起来您希望为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();
    }
    

    【讨论】:

    • 谢谢,我有一个临时解决方案,通过在每次写入后创建一个新的发射器来清除内存,但你的建议听起来很理想。我会提出请求。
    猜你喜欢
    • 2011-09-13
    • 2010-10-19
    • 2018-05-02
    • 2015-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-14
    • 1970-01-01
    相关资源
    最近更新 更多