问题标签 [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.

0 投票
2 回答
1255 浏览

c++ - 如何序列化 boost::function 以将其发送到 message_queue

我实际上是在尝试使用 boost::serialize 序列化 boost::function,因为我想在 boost::interprocess::message_queue 中共享它。我只看到了一种方法,那就是使用非侵入式的 boost::serialize 版本。

我还需要序列化 ​​vtable 和 functor,我没有尝试过,我不确定它是否有效。

那么有什么方法可以以适当的方式序列化 boost::function 吗?

谢谢你。

0 投票
3 回答
5893 浏览

c# - C++ 和 C# 中的二进制序列化/反序列化

我正在开发一个具有两个组件的分布式应用程序。一种是用标准 C++ 编写的(非托管 C++并在 Linux 平台上运行),另一种是用 C# 编写的。两者都通过消息总线进行通信。

我有一种情况,我需要将对象从 C++ 传递到 C# 应用程序,为此我需要在 C++ 中序列化这些对象并在 C# 中反序列化它们(类似于 .NET 中的编组/取消编组)。我需要以二进制而不是 XML 执行此序列化(由于性能原因)。

Boost.Serialization当两端都用 C++ 实现时,我曾经这样做过,但现在我在一端有一个 .NET 应用程序,Boost.Serialization这不是一个可行的解决方案。

我正在寻找一种解决方案,允许我跨 C++ 和 .NET 边界执行(反)序列化,即跨平台二进制序列化

我知道我可以在 C++ dll 中实现(反)序列化代码并P/Invoke在 .NET 应用程序中使用,但我想保留它作为最后的手段。

另外,我想知道如果我使用像gzip这样的标准,那会有效吗?gzip还有其他替代品吗?它们的优点/缺点是什么?

谢谢

0 投票
1 回答
205 浏览

c++ - 如何制作解析指针的存档?

我计划制作像 boost::archive::xml_oachive 这样的自定义存档,并且在 boost/libs/serialization/example 文件夹中找到了很好的示例。

请参阅下一个代码(在上面的目录中):

同样,我正在制作我的自定义存档。但是我的和上面的代码不是自动将基指针转换为派生指针。例如,

你可以帮帮我吗?如何从基指针到派生指针?

0 投票
2 回答
2387 浏览

c++ - 如何使用 boost 序列化 CString

我正在尝试使用 boost::serialization 来替换现有项目的一部分,该项目实现了自己的序列化方法但不是那么好。但是,我面临一些问题,因为该应用程序使用 MFC。我尝试按如下方式序列化 CString

但是我遇到了一些错误

boost_1_45_0\boost\serialization\access.hpp(118): error C2039: 'serialize' : is not a member of 'ATL::CStringT'

在 access.hpp 它说

所以我想CString由于MFC而有一些序列化。

现在我想知道,我能做什么?有什么解决方法吗?我试图避免将 CStrings 重新定义为 std:string 因为它们太多了,这意味着要重新执行整个项目。

另外,我想序列化一个 CArray,但我得到了相同类型的错误,即序列化不是 CArray 的成员。

编辑: CString 问题通过添加解决

我不知道为什么宏不起作用。但是,我仍然面临 CArray 的问题。我尝试了一个简单的解决方案

但这不会创建任何 XML。然后我尝试像这样迭代数组

但这不是调用类的序列化。是否有任何直接的方法来序列化 Boost 示例中的 std::vector 或 std::list 之类的数组?

0 投票
1 回答
844 浏览

c++ - 使用 Boost 序列化注册用户提供的派生类型

我正在编写一个库来处理存储和序列化用户定义的类型。用户定义的类型本身必须是可序列化的。

但是,该库使用模板来创建用户类型的容器。我不知道如何通过模板将容器类型导出为 boost::serialization。我能做到的唯一方法是强制库的用户使用 BOOST_CLASS_EXPORT_GUID() 每种容器类型。

我已经尝试通过查看 boost/serialization/export.hpp 来解压宏,但它有点复杂......有没有办法将类导出为模板实例化的一部分?或者另一种编写库以轻松序列化用户定义类型的容器的方法?

0 投票
3 回答
1345 浏览

c++ - 提升序列化:可以安全地忽略警告?

我开始使用 boost 的序列化代码将数据写入二进制流。我收到以下可以禁用的警告(D_SCL_SECURE_NO_WARNINGS),但我想知道这样做是否安全?如何获得更具体的信息,我的代码导致警告?我只知道 .cpp 文件。

这是 Visual Studio 2008 的输出:

谢谢!

0 投票
1 回答
1236 浏览

c++ - 模板类的非侵入式序列化方法

我正在使用 boost 序列化,主要是侵入式版本。对于模板 Matrix 类,我希望拥有可在 Visual Studio 上使用以下代码的非侵入式版本:

int R,int C是行和列,ElementTypedoublefloat.

但是,这不适用于 GCC 4.3.2 并出现错误

如果我使用特殊形式,例如

它在 GCC 上编译,但当然只针对一组特殊的模板参数。

我该怎么做才能使它在所有编译器上都工作RC并且ElementType

编辑:这些是导致错误的行:

0 投票
5 回答
4520 浏览

c++ - c++网络序列化

我正在寻找一种将 C++ 数据包序列化为网络流的解决方案。

我在这里看到很多帖子提到人们:

  1. 高手

  2. Google 协议缓冲区

  3. Boost::序列化

  4. Qt ::QDataStream

我的要求/限制:

  1. 解决方案必须不知道 LitteEndian/BigEndian。机器架构 x86/x64 和平台无关。

  2. 前 3 个解决方案的占用空间(RAM 和 ROM)对于我的平台来说太大了,第四个与下一个要求相冲突。

  3. 该解决方案不需要大量样板代码(将有 200 多个数据包要序列化)。

谢谢,科比·梅尔

0 投票
1 回答
281 浏览

c++ - 我可以告诉 Boost.MPI 哪个类版本与 Boost.Serialization 一起使用吗?

我正在使用 Boost.MPI 在进程之间交换消息。每条消息都带有我的一个类,使用 Boost.Serialization 进行序列化。我还使用相同的序列化代码将该类保存到文件中。我需要通过 MPI 发送的内容小于我需要保存到文件的内容(相关成员较少)。我在想最好使用序列化库支持的类版本控制来告诉 Boost.MPI 发送类的非默认版本,但我似乎找不到这样做的方法。你知道这是否可能吗?

0 投票
2 回答
1167 浏览

c++ - Boost序列化:如何在运行时选择版本?

我正在使用Boost 序列化来序列化数据成员,以便从一个组件传输到另一个组件。该文档讨论了如何使用类版本机制来反 序列化一个类的旧版本和新版本

我的用例略有不同。在某些情况下,新版本的代码会将对象发送到旧版本。旧版本没有新定义,因此它无法使用该机制来读取新版本。相反,我想以编程方式设置 Boost 类版本,并在连接到旧客户端时生成旧版本的类。问题是该版本似乎在编译时设置为静态常量。

我可以使用 Boost 提供的工具来完成此操作,还是必须将自己的版本信息添加到类的每个实例中?