C++; 我正在寻找一种在C++中序列化某一类的好方法。此类的主要功能是std::shared_ptr的列表/向量/集合,其中可以有base_类的不同子类

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

到目前为止,我已经尝试使用谷物库实现了这个功能,并取得了初步成功。生成的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
derivedclass2
是公共
基本类的子类

这可能吗?当然,我不是在要求完整的解决方案。但对这种做法的可能性和合理性的评论将非常有用

编辑1:我听说谷类食品很好,所以我用它来做这些测试。我会很高兴与任何其他现代C++头文件库。从头开始实现自己的序列化函数可以看作是最后的手段


编辑2:对于谷物,问题归结为:是否有一种很好的方法来序列化多晶型对象,而不使用
polymorphic\u id
ptr\u wrapper
id
字段(这些字段对用户不是很友好的IMHO)?

我有一个类似的应用程序,如果有任何提示,我将不胜感激!将序列化函数添加到基类并使其成为虚拟函数。让孩子们实现它们。@ThomasMatthews您建议从头开始实现自己的序列化函数吗?虽然我愿意做这件事作为最后的手段,但我更愿意以现有的库为基础。我没有使用过谷物库。多态性看起来可以解决您的问题。验证如何使用谷类库和继承。我有一个类似的应用程序,如果有任何提示,我将不胜感激!将序列化函数添加到基类并使其成为虚拟函数。让孩子们实现它们。@ThomasMatthews您建议从头开始实现自己的序列化函数吗?虽然我愿意做这件事作为最后的手段,但我更愿意以现有的库为基础。我没有使用过谷物库。多态性看起来可以解决您的问题。验证如何使用库和继承。