问题标签 [boost-serialization]
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++ - boost::序列化与可变成员
使用 boost::serialization,序列化包含可变成员中缓存的派生值的对象的“最佳”方法是什么?
出于维护原因,我想避免将 serialize() 拆分为单独的 save() 和 load() 方法。
序列化的一种次优实现:
这处理了反序列化的情况,但是在序列化的情况下,缓存的值被杀死并且必须重新计算。
在这种情况下,最佳做法是什么?
c++ - 类似于 XSTREAM 的 C++ 序列化 Clean XML
我需要编写一个 linux c++ 应用程序,它以 XML 格式保存它的设置(以便于手动编辑),并且还通过套接字和 HTTP 上的 XML 消息与现有应用程序进行通信。问题是我无法找到任何智能库来帮助我,我并不特别想编写 DOM 或 SAX 代码来编写和阅读一些非常简单的消息。
Boost Serialization 几乎是一个匹配项,但它在它生成的 xml 中添加了许多特定于 boost 的数据。这显然不适用于交换格式。我想知道是否可以使 Boost Serialization 或其他一些 c++ 序列化库生成干净的 xml。我不介意是否有一些必需的额外属性——比如版本属性,但我真的希望能够控制它们的命名并摆脱我不使用的“功能”——tracking_level 和 class_id实例。
理想情况下,我只想在 Java 中拥有类似于 xstream 的东西。我知道 c++ 缺乏自省,因此有必要进行一些手动编码 - 但如果有一个干净的解决方案来读取和写入简单的 XML 而不会产生混乱,那就太好了!
如果无法做到这一点,我也对 XML 模式是规范资源(合同优先)的工具感兴趣——这是 C++ 的一个很好的 JAXB 替代品。到目前为止,我只找到了像 CodeSynthesis XSD 这样的商业解决方案。我更喜欢开源解决方案。我已经尝试过 gSoap - 但它会生成非常丑陋的代码,而且它也是特定于 SOAP 的。
无奈之下,我也开始寻找 protobuffers 的替代序列化格式。这存在 - 但仅适用于 Java!令我惊讶的是,协议缓冲区似乎是比 XML 更受支持的数据交换格式。
我只是为这个应用程序寻找库而发疯,我真的需要一些新的想法。任何人?
c++ - Boost 序列化库升级
我怎么知道我可以在生产系统上安全地升级Boost 序列化库而不破坏与现有数据的兼容性?是否应该执行任何测试以确保新版本的库以二进制格式存储的所有数据都将被新版本成功读取?Boost Serialization 库本身是否保证版本之间的某种兼容性?
c++ - 使用 Boost.Serialization 解析自定义 XML 格式
我有一个需要序列化为对象的自定义 XML 格式。
我只需要序列化某些标签并忽略其余的。
我的印象是我需要编写自己的归档类,但没有说明如何完成的文档。
我不需要保存任何东西,只需加载对象的初始状态。
有人给我指点吗?
c++ - 使用 boost::serialization 将对象映射序列化为 xml
下面的序列化示例来自boost 邮件列表,这与我想做的几乎相同。但是,我更改了存档,以便将其序列化为 XML。如果我序列化为二进制,则编译不会失败,但在序列化为 xml 时会失败。basic_xml_oarchive.hpp
以下方法编译失败:
似乎我没有做足够的事情来允许std::map<int, CSomeData>
对象被序列化,关于如何解决这个问题的任何想法?
我的序列化实现:
c++ - 使用 boost::serialization 的序列化树结构
我必须在我的程序中序列化 libkdtree++,树结构简要描述如下:
该程序报告“流错误”。但是从“serailized 文件”中,它缺少根的子节点的值字段。因此我认为 BaseNode 序列化 _M_left 和 _M_right 指针是可能的。然而,由于_Node_base 不知道_Node 的值类型,所以看起来很难将“ar.register_type”添加到_Node_base.serialize()。
c++ - BOOST_CLASS_EXPORT 放在哪里进行 boost::serialization?
我正在尝试序列化指向多态类的指针Shape
。所以我需要使用BOOST_CLASS_EXPORT
宏来为每个子类定义一个 GUID。问题:放在哪里?
让我先展示一个最小的测试用例:
形状.hpp
导出.cpp
主文件
在 gcc 上,我用
在这里,export.cpp
可能看起来有点傻。在我的实际情况中,它包含一个使用 PIMPL 习语的封闭类,并尝试序列化其(多态)Shape
实现。重要的一点是:BOOST_CLASS_EXPORT
可能与调用序列化的代码位于不同的目标文件中。
那么问题来了:在哪里使用BOOST_CLASS_EXPORT
?我有三个选项,可以使用EXPORT_IN_XXX
宏启用。
EXPORT_IN_MAIN
有效,但不是我想要的。调用序列化的代码不需要知道 PIMPL 类的实现细节。EXPORT_IN_OBJECT
编译,但不起作用:它导致boost::archive::archive_exception
带有消息unregistered void cast
。根据文档,这应该通过boost::serialization::base_object
像我一样使用序列化基类来解决,但这没有帮助。EXPORT_IN_HEADER
甚至不编译。宏BOOST_CLASS_EXPORT
扩展为模板特化(我们希望在头文件中),但也扩展为其中静态成员的定义。所以我得到一个关于 a 的链接器错误multiple definition of 'boost::archive::detail::init_guid<Rect>::guid_initializer'
。
如果重要的话,我正在使用 g++ 4.4.3 和 Boost 1.40。
c++ - 使用 boost::serialization 序列化为 XML
这是一个新手问题。我正在尝试将一些对象序列化为 XML,但生成的 XML 包含增强序列化签名、版本信息、类 id 等。我不需要。有没有办法在不对 xml 消息进行后处理的情况下摆脱它们?
结果是:
不过,我会将这些消息序列化为字符串,并将它们发送到期望消息看起来像这样的系统。
有没有办法在没有签名的情况下序列化 xml?
c++ - 使用 boost 序列化库序列化 stdext::hash_map
我想将哈希映射序列化为文件并稍后对其进行反序列化。
但我收到一个错误,因为 -
错误 C2039:“序列化”:不是“stdext::hash_map<_Kty,_Ty>”的成员
我在网上搜索了这个错误,但没有得到太多帮助。另外,我检查了我的 boost 安装serialization/hash_map.hpp
确实有一个serialize()
功能。相同的代码适用于std::deque
. 谁能告诉我应该如何更改它以使其编译?
c++ - Does Boost.Serialization serialize differently on different platforms?
I use Boost.Serialization to serialize a std::map. The code looks like this
I compiled and tested the code on a Mac Snow Leopard and on Ubuntu Lucid 10.04. There is Boost 1.40 on both systems. On the Mac I built the code myself. On the Ubuntu box I got the binaries via aptitude.
Problem: When I serialize the map on the Mac I can't deserialize it on the Ubuntu box. I get an invalid signature exception if I try.