次のような 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));
クラスに既に実装したシリアル化機能を利用してそれを行う方法はありますか?