C++; 我正在寻找一种在C++中序列化某一类的好方法。此类的主要功能是std::shared_ptr的列表/向量/集合,其中可以有base_类的不同子类
到目前为止,我已经尝试使用谷物库实现了这个功能,并取得了初步成功。生成的JSON文件如下所示C++; 我正在寻找一种在C++中序列化某一类的好方法。此类的主要功能是std::shared_ptr的列表/向量/集合,其中可以有base_类的不同子类,c++,serialization,polymorphism,cereal,C++,Serialization,Polymorphism,Cereal,到目前为止,我已经尝试使用谷物库实现了这个功能,并取得了初步成功。生成的JSON文件如下所示 { "value0": [ { "polymorphic_id": 2147483649, "polymorphic_name": "DerivedClassOne", "ptr_wrapper": { "id": 2147483649, "da
{
"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
和derivedclass2
是公共基本类的子类
这可能吗?当然,我不是在要求完整的解决方案。但对这种做法的可能性和合理性的评论将非常有用
编辑1:我听说谷类食品很好,所以我用它来做这些测试。我会很高兴与任何其他现代C++头文件库。从头开始实现自己的序列化函数可以看作是最后的手段
编辑2:对于谷物,问题归结为:是否有一种很好的方法来序列化多晶型对象,而不使用polymorphic\u id
、ptr\u wrapper
或id
字段(这些字段对用户不是很友好的IMHO)?我有一个类似的应用程序,如果有任何提示,我将不胜感激!将序列化函数添加到基类并使其成为虚拟函数。让孩子们实现它们。@ThomasMatthews您建议从头开始实现自己的序列化函数吗?虽然我愿意做这件事作为最后的手段,但我更愿意以现有的库为基础。我没有使用过谷物库。多态性看起来可以解决您的问题。验证如何使用谷类库和继承。我有一个类似的应用程序,如果有任何提示,我将不胜感激!将序列化函数添加到基类并使其成为虚拟函数。让孩子们实现它们。@ThomasMatthews您建议从头开始实现自己的序列化函数吗?虽然我愿意做这件事作为最后的手段,但我更愿意以现有的库为基础。我没有使用过谷物库。多态性看起来可以解决您的问题。验证如何使用库和继承。