1

我正在寻找一种在 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
              }
         }
    ]
}

其中DerivedClassOneDerivedClassTwo是 common 的子类base_class

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

编辑 1:我听说过有关谷物的好消息,因此我将其用于这些测试。我会对任何其他现代 C++ 仅标头库感到满意。从头开始实现自己的序列化函数可以看作是最后的手段。

编辑2:对于谷物,问题归结为:有没有一种很好的方法来序列化没有 , 或 字段的多态对象polymorphic_idptr_wrapperid我直言,这不是非常用户友好)?

4

0 回答 0