问题标签 [cereal]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 如何列出 Cereal 找到的序列化函数
上下文:我在编译现有(大)代码时遇到了这个断言:
阅读文档后,我对加载/保存函数进行了grep,但只找到了序列化函数,所以看起来这不是将加载/保存与序列化函数混合的情况。
有没有办法列出所有触发该断言的函数(或任何其他可能帮助我找到问题的方法)?
c++ - boost::container::vector 不能用 Cereal 序列化?
我正在尝试boost::container::vector<int>
使用 Cereal 序列化一个(我知道 boost 提供了一个类似于 Cereal 的序列化库,但是整个项目都使用 Cereal 并且它的一个角落恰好依赖于 boost 向量)。
我已经为 定义了模板化save
和load
函数boost::container::vector<int>
,但 Cereal 失败并出现静态断言,说它找不到保存/加载函数对、序列化函数或 save_minimal/load_minimal 函数对。
这是一个展示这个问题的简单代码。为了比较,我还定义了一个模板结构 myStruct ,它采用与 a 相同类型的模板参数boost::container::vector
,以检查相同的代码是否适用于我自己的类型。
编辑:请注意,在包含任何谷物标题之前,我还尝试重新定义CEREAL_SERIALIZE_FUNCTION_NAME
,
CEREAL_LOAD_FUNCTION_NAME
和,因为我虽然和方法可能与 boost 提供的函数发生冲突,但即使使用重命名的函数也不起作用。CEREAL_SAVE_FUNCTION_NAME
save
load
c++ - “自动”推断 hashtable_policy.h 中的类型不正确
我正在构建一对工具gridlab-d和HELICS,其中一个使用后者的共享库。在成功构建/安装 HELICS 后编译 gridlab-d 时,出现以下错误:
调查有问题的标题,这是它抱怨的代码:
因此,似乎auto
of 的类型__max_width
被错误地推断为 typedouble
而不是size_t
(这应该可以从 of 的类型中简单地推断出来std::min<size_t>
)。如果我复制标题,然后将其编辑为更改auto
为size_t
,则错误消失,确认这一点。
有趣的是,以下程序编译时没有任何抱怨:
我在 Ubuntu 18.04 上,使用 gcc 7.4.0,虽然我在使用 clang 6.0.0 时遇到了同样的错误。我还确认这发生在 chroot 18.04 环境和另一台运行 WSL Ubuntu 18.04 的机器上。HELICS 是使用 Python 接口和 编译的HELICS_BUILD_CXX_SHARED_LIB
,gridlab-d 是按照说明构建的。
很高兴提供额外的信息,任何帮助解决这个问题而不需要用户修改他们的标准标题将不胜感激。
更新:这是根文件的预处理输出helics_msg.cpp
,带有它抱怨的特定功能。我没有看到任何会导致错误的宏有趣的业务。完整文件作为 gist位于此处,片段从第 72,722 行开始。它是一个大文件(> 95k 行)。
cereal - CEREAL 无法序列化 - 无法从输入流异常中读取
我发现了一个特定的 100MB 二进制文件(CarveObj_k5_rgbThreshold10_triangleCameraMatches.bin 在最小示例中),其中谷物无法加载抛出异常“无法从输入流中读取 368 字节!读取 288”
从相同数据构建的相应 900MB XML 文件(在最小示例中为 CarveObj_k5_rgbThreshold10_triangleCameraMatches.xml)正常加载。
XML 文件由
二进制版本由
最小示例:https ://www.dropbox.com/sh/fu9e8km0mwbhxvu/AAAfrbqn_9Tnokj4BVXB8miea?dl=0
使用的谷物版本:1.3.0
2017 年
视窗 10
这是一个错误吗?我错过了一些明显的东西吗?同时创建了一个错误报告:https ://github.com/USCiLab/cereal/issues/607
c++ - C++中多态对象向量的序列化
我正在寻找一种在 C++ 中序列化某个类的好方法。此类的主要特征是 的列表/向量/集合std::shared_ptr<base_class>
,其中可以有 的不同子类base_class
。
到目前为止,我已经尝试使用谷物库来实现这一点,并取得了初步成功。生成的 JSON 文件看起来像
我想这对于不涉及人类的用例来说很好。但是,我之所以看这个功能,是因为用户可以编写自己的(配置)文件,例如以下示例:
其中DerivedClassOne
和DerivedClassTwo
是 common 的子类base_class
。
这可能吗?当然,我并不是要求完整的解决方案。但对这种方法的可能性和合理性的评论将非常有帮助。
编辑 1:我听说过有关谷物的好消息,因此我将其用于这些测试。我会对任何其他现代 C++ 仅标头库感到满意。从头开始实现自己的序列化函数可以看作是最后的手段。
编辑2:对于谷物,问题归结为:有没有一种很好的方法来序列化没有 , 或 字段的多态对象polymorphic_id
(ptr_wrapper
恕id
我直言,这不是非常用户友好)?
c++ - Boost 和谷物序列化完整性
我查看了 Boost Serialization 和 Cereal 库的文档,但没有找到任何具体的内容。我想知道是否可以对序列化数据进行完整性检查。我不是在谈论安全方面,但如果出于任何原因保存的文件损坏,则加载的数据可能完全错误。这些库中是否有关于这方面的支持?我想自己实现类似的东西,但是两个库的加载阶段都存在问题:
为了计算校验和,我需要读取所有数据。但是,对于这两个库,我无法从存档中提取任何内容,我只能填写类属性,希望所有内容都加载没有错误,然后我可以计算校验和。我想在加载类属性之前计算校验和。可能吗?
c++ - startNode 方法的谷物替代品
我正在使用带有 c++ 的谷物来序列化和反序列化 JSON。我的 Json 对象都有一个基类,这种映射到 JSON 就像这样......
派生类在此 JSON 数组的末尾提供 JSON 对象,而基类在数组中提供值。
我的课看起来大概是这样的,
我不禁想考虑谷物的使用有多容易,其中 JSON 的结构是隐式定义的,我可能会因为必须显式调用而犯错startNode()
,finishNode()
和makeArray()
? 是否有替代实现可以为我处理 JSON 结构,而不必明确说明我希望子节点在哪里?
cereal - 谷物::延迟和 CEREAL_NVP?
我正在尝试同时使用 Cereal 的名称-值-对功能和延迟序列化功能,但我似乎无法让它工作。
似乎cereal::defer( CEREAL_NVP( vecOfSharedPtrs ) )
在save(Archive& ar) const
函数中有效,产生了正确命名的输出,但在其中写入相同的输出load(Archive& ar)
会产生编译错误。
我觉得我用错了,还是不支持?
c++ - 使用谷物序列化/反序列化结构到 XML 而不修改结构接口
我的情况如下,作为测试 API 接口的一部分,我需要将一些引用(结构和结构向量)保存为 XML。保存的 XML 文件最终将用于检索参考结构并与当前状态进行比较。我正在寻找一个可以帮助我解决该问题的库,并发现谷物库似乎是一个不错的选择。
我只是发现自己编写了很多样板代码,并且想知道我是否按照预期的方式使用该库。
示例:我想从 API 序列化结构 A,因为我不能直接修改 A 以添加序列化方法,我需要创建一个从 A 继承的结构 B,以便序列化 A 的所有属性。
1)这是使用谷物的正确方法吗?
2)有没有更好的方法或另一个库可以让我用更少的样板代码获得相同的结果?(记住有不少结构需要序列化)
注意:结构可以与来自同一 API 的其他结构嵌套。