我正在使用Cereal C++ v1.1.1,并且与文档中给出的example类似,我正在尝试以下操作:

#include <sstream>
#include <iostream>
#include <cereal/archives/json.hpp>

int main() {
  std::ostringstream os;
  cereal::JSONOutputArchive archive(os);
  int x = 12;
  archive(CEREAL_NVP(x));
  std::cout << os.str(); // JUST FOR DEMONSTRATION!
}

我希望有以下几点:

{
  "x":12
}

但右花括号不见了。知道代码中缺少什么吗?

更新:

添加archive.finishNode()似乎可以解决问题。但是我会说这不是解决方案。根据 operator() 文档,调用运算符(operator)会序列化输入参数,为什么还要额外添加finishNode

最佳答案

我遇到了同样的问题,并在对Cereal的GitHub上提交的问题的评论中找到了解决方案:https://github.com/USCiLab/cereal/issues/101

10-08 01:43