3

我正在寻找一种在 2 个客户端应用程序之间发送 C++ 类的方法。我一直在寻找这样做的方法,我能找到的只是我需要为每个类序列化/反序列化(例如 JSON)函数创建并通过 TCP/IP 发送它。我面临的主要问题是我需要通过大约 600 个类(有些是包括其他实例的类),这意味着我需要花费下一个编写序列化/反序列化函数。

有没有写序列化/反序列化函数的通用方法?有没有其他方式发送 C++ 类?

谢谢,盖伊·厄加斯。

4

5 回答 5

2

你在使用框架吗?例如,Qt 和 MFC 内置了序列化,这将使您的任务更容易。否则,我猜您至少需要在 600 个课程中的每一个上花费一些精力。

正如上面推荐的 Boost Serialization 可能是一个不错的方法,您也可以使用 Boost Asio 通过 Tcp 发送序列化类:http: //www.boost.org/doc/libs/1_54_0/doc/html/boost_asio.html

或者,有一个用于 Google 协议缓冲区 (protobuf) 的 C++ API: https ://developers.google.com/protocol-buffers/docs/reference/cpp/

于 2013-10-06T08:32:01.173 回答
2

Boost Serialization
虽然我自己没有用过,但在工作中的同行中很受欢迎。
有关它的更多信息可以在“Boost (1.54.00) 序列化”中找到

Thrift
Thrift 的序列化功能非常有限,我认为它不符合您的要求。但它可以帮助您将数据从一个客户端“移动”到另一个客户端,即使他们使用不同的语言。
关于它的更多信息可以在“Thrift: The Missing Guide”中找到

于 2013-10-06T08:03:59.197 回答
1

试试s11nnosjob

s11n(序列化的缩写)是一个开源项目,专注于 C++ 编程语言中对象的通用序列化(即对象持久性)。

nosjob,一个用于生成和使用 JSON 数据的 C++ 库。

于 2013-10-06T11:20:01.330 回答
1

您可能对 ASN.1 感兴趣。它不一定是最容易使用的,而且工具/库有点难以获得(http://www.obj-sys.com/index.php上的 Objective Systems 值得一看,虽然不是免费的)。

然而,最大的优势是它非常标准化(因此库版本不兼容没有问题)并且大多数语言都以一种或另一种方式支持。如果您需要跨多个平台的支持,这将非常方便。它还进行二进制编码,因此它比 XML(它也支持)不那么臃肿。我出于这些原因选择了它,并且没有后悔。

于 2013-10-16T05:39:26.180 回答
0

如果你在linux平台,你可以直接使用json.h库进行序列化。这是我遇到的示例代码:)

Json 序列化器

于 2014-10-07T08:42:57.077 回答