假设我有一个 C++ 类,如下所示:
struct Point {
int x, y, z;
};
我想使用 Cereal 将该结构序列化为 JSON。所以我添加了一个这样的序列化函数:
struct Point {
int x, y, z;
template<class Archive>
void serialize(Archive& ar) {
ar(CEREAL_NVP(x),
CEREAL_NVP(y),
CEREAL_NVP(z));
}
};
当 Point 是另一个对象的成员或数组的元素时,这可以正常工作。但是如果我想让 Point 成为整个 JSON 文件的主要对象,它就不能正常工作。例如,使用以下代码:
Point p { 1, 2, 3 };
cereal::JSONOutputArchive ar(std::cout);
ar(p);
我得到以下输出:
{
"value0": {
"x": 1,
"y": 2,
"z": 3
}
}
我想删除"value0"
密钥并提升对象以占用整个文件,如下所示:
{
"x": 1,
"y": 2,
"z": 3
}
我似乎可以这样做的唯一方法是基本上重新实现序列化功能,手动添加键名。
Point p {1, 2, 3};
cereal::JSONOutputArchive ar(std::cout);
ar(cereal::make_nvp("x", p.x),
cereal::make_nvp("y", p.y),
cereal::make_nvp("z", p.z));
有什么方法可以利用我已经为该类实现的序列化函数吗?