我正在寻找一种在 C++ 中序列化某个类的好方法。此类的主要特征是 的列表/向量/集合std::shared_ptr<base_class>
,其中可以有 的不同子类base_class
。
到目前为止,我已经尝试使用谷物库来实现这一点,并取得了初步成功。生成的 JSON 文件看起来像
{
"value0": [
{
"polymorphic_id": 2147483649,
"polymorphic_name": "DerivedClassOne",
"ptr_wrapper": {
"id": 2147483649,
"data": {
"value0": 0
}
}
},
{
"polymorphic_id": 2147483650,
"polymorphic_name": "DerivedClassTwo",
"ptr_wrapper": {
"id": 2147483650,
"data": {
"value0": 0.0
}
}
}
]
}
我想这对于不涉及人类的用例来说很好。但是,我之所以看这个功能,是因为用户可以编写自己的(配置)文件,例如以下示例:
{
"value0": [
{
"DerivedClassOne": {
"MemberOfDerivedClassOne": 1
}
},
{
"DerivedClassTwo": {
"MemberOfDerivedClassTwo": 1
}
}
]
}
其中DerivedClassOne
和DerivedClassTwo
是 common 的子类base_class
。
这可能吗?当然,我并不是要求完整的解决方案。但对这种方法的可能性和合理性的评论将非常有帮助。
编辑 1:我听说过有关谷物的好消息,因此我将其用于这些测试。我会对任何其他现代 C++ 仅标头库感到满意。从头开始实现自己的序列化函数可以看作是最后的手段。
编辑2:对于谷物,问题归结为:有没有一种很好的方法来序列化没有 , 或 字段的多态对象polymorphic_id
(ptr_wrapper
恕id
我直言,这不是非常用户友好)?