我正在寻找一种在 2 个客户端应用程序之间发送 C++ 类的方法。我一直在寻找这样做的方法,我能找到的只是我需要为每个类序列化/反序列化(例如 JSON)函数创建并通过 TCP/IP 发送它。我面临的主要问题是我需要通过大约 600 个类(有些是包括其他实例的类),这意味着我需要花费下一个编写序列化/反序列化函数。
有没有写序列化/反序列化函数的通用方法?有没有其他方式发送 C++ 类?
谢谢,盖伊·厄加斯。
我正在寻找一种在 2 个客户端应用程序之间发送 C++ 类的方法。我一直在寻找这样做的方法,我能找到的只是我需要为每个类序列化/反序列化(例如 JSON)函数创建并通过 TCP/IP 发送它。我面临的主要问题是我需要通过大约 600 个类(有些是包括其他实例的类),这意味着我需要花费下一个编写序列化/反序列化函数。
有没有写序列化/反序列化函数的通用方法?有没有其他方式发送 C++ 类?
谢谢,盖伊·厄加斯。
你在使用框架吗?例如,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/
Boost Serialization
虽然我自己没有用过,但在工作中的同行中很受欢迎。
有关它的更多信息可以在“Boost (1.54.00) 序列化”中找到
Thrift
Thrift 的序列化功能非常有限,我认为它不符合您的要求。但它可以帮助您将数据从一个客户端“移动”到另一个客户端,即使他们使用不同的语言。
关于它的更多信息可以在“Thrift: The Missing Guide”中找到
您可能对 ASN.1 感兴趣。它不一定是最容易使用的,而且工具/库有点难以获得(http://www.obj-sys.com/index.php上的 Objective Systems 值得一看,虽然不是免费的)。
然而,最大的优势是它非常标准化(因此库版本不兼容没有问题)并且大多数语言都以一种或另一种方式支持。如果您需要跨多个平台的支持,这将非常方便。它还进行二进制编码,因此它比 XML(它也支持)不那么臃肿。我出于这些原因选择了它,并且没有后悔。
如果你在linux平台,你可以直接使用json.h
库进行序列化。这是我遇到的示例代码:)