Допустим, у меня есть класс на 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));
Есть ли способ сделать это, используя функцию сериализации, которую я уже реализовал для класса?