【问题标题】:how to create manually a file for cereal import?如何手动创建谷物进口文件?
【发布时间】:2015-10-18 15:07:57
【问题描述】:

我想创建一个 (json) 文件 manuyll(使用 python)并将其与谷物一起加载到我的 c++ 应用程序中。

使用 ceral 进行保存和加载工作正常。但是,我不清楚json文件中的polymorphic_ids。

这里有一个更清晰的例子: 这是由谷物框架生成的对象: ```

{
    "array1": [
        {
            "key": 0,
            "value": {
                "ptr_wrapper": {
                    "id": 2147483649, //!-- ID1
                    "data": {
                        ...some float fields...
                    }
                }
            }
        }, 
       {
        "key": 1,
        "value": {
            "ptr_wrapper": {
                "id": 2147483650, //!-- This is previous ID+1 and so on...
                "data": {
                    ... some float fields...
                    }
                }
            }
        }
    ],
    "array2": [
        {
            "key": 0,
            "value": {
                "polymorphic_id": 2147483649, //!-- this is the very first ID from array 1.
                "polymorphic_name": "my_struct_name",
                "ptr_wrapper": {
                    "id": 2147483651, //this ID1+N Elements from array1
                    "data": {
                        ... also some float stuff...
                    }
                }
            }
        }
    ]
}

```

当我观察到数字生成时,第一个 ID 增加了。第二个数组使用第一个ID作为其多态ID,并进一步增加数字。

那么为什么使用这些数字有什么逻辑吗? 一直使用它们会省钱吗?或者当我在另一台机器上运行我的 c++ 导入器时这些会改变吗?

【问题讨论】:

    标签: c++ serialization cereal


    【解决方案1】:

    ptr_wrappers 中的 ids 是由谷物生成的,用于跟踪它在保存或加载时已经序列化的指针。它们是 32 位无符号整数,从 1 开始,并随着保存的每个新指针递增。

    如果是第一次遇到指针,则最高有效位设置为 1,以便谷物可以避免多次保存数据。如果数据已经保存,谷物将查找先前生成的数字并使用它。请注意,此查找的数字不会将 MSB 设置为 1。

    有关详细信息,请参阅InputArchiveOutputArchive 中的函数 registerSharedPointer。

    多态 id 使用它们自己的计数器以相同的方式生成,请参阅同一文件中的 registerPolymorphicType 函数。

    一般来说,我不建议尝试手动生成处理多态性或共享指针等问题的谷物 JSON,因为错误地生成这些数字可能会使您的程序崩溃。但是,如果您可以确保它们的生成与谷物完全相同,那么它应该可以工作。

    【讨论】:

      猜你喜欢
      • 2016-12-27
      • 2012-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-18
      • 1970-01-01
      • 2014-03-28
      相关资源
      最近更新 更多