如何手动创建用于谷物导入的文件
how to create manually a file for cereal import?
我想手动创建一个(json)文件(使用python)并将其加载到我的c++应用程序中。
保存和加载使用谷物工作良好。但是,json文件中的多态性对我来说并不清楚。
下面是一个更清晰的例子:这是由谷物框架生成的对象:{
"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++导入器时,这些会改变吗?
ptr_wrappers中的id是由cereal生成的,用于跟踪它在保存或加载时已经序列化的指针。它们是32位无符号整数,从1开始,每保存一个新指针就递增。
如果是第一次遇到指针,则将最高有效位设置为1,这样可以避免多次保存数据。如果数据已经保存,那么麦片将查找以前生成的数字并使用它。请注意,这个查询的数字不会将MSB设置为1。
参见InputArchive和OutputArchive中的registerSharedPointer函数了解更多信息。
多态id以相同的方式生成,使用它们自己的计数器,参见同一文件中的registerPolymorphicType函数。
一般来说,我不建议尝试手工生成处理多态性或共享指针等问题的JSON,因为错误地生成这些数字可能会导致程序崩溃。但是,如果您能确保它们完全像谷类那样生成,它应该可以工作。相关文章:
- 无法将标准库导入本机 android 项目中的头文件
- 如何在安卓工作室中将c ++头文件从一个文件夹导入到另一个文件夹?
- C++20 使用 Visual Studio 编译模块:不编译或导入 ixx 文件
- Assimp - 如何使用任何文件格式导入带有纹理的网格?
- 链接器找不到导入的 DLL 的 LIB 文件
- 如何在 c++ 中导入文件?以及如何成功编译它们?
- 从文件导入数据时遇到问题.我有一个没完没了的循环
- 如何在Windows窗体应用程序中打开txt文件并将行导入文本框
- CMake GoogleTests在我的测试文件中找不到导入的头文件
- 移植DXUT SDKMesh以导入OBJ文件,在哪里添加纹理坐标和索引
- 使用 GDAL 将 DXF 块从一个文件导入到另一个文件
- 如何从 Makefile 中的其他目录导入所有源代码和头文件
- 如何在 C++ 中使用特征库导入矩阵市场文件
- 我将如何在C++中文件处理对象(存储/导入)
- 如何使用C++ GPGME 导入 GPG 密钥和解密文件
- 如何修复在glm中导入h文件'duplicate symbol'
- 初学者c++导入文件,查找sum和average
- 导入文件txt时出错
- C++程序如何从".a"文件导入文件,但您不能自己反转".a"文件?
- 导入文件存在于eclipse C++Linux项目中