sth*_*sth 12

Boost包含一个序列化库.我自己没有使用它,但通常升级库工作得很好.

  • 当你回答身体中的问题时,你没有在标题中提出问题 - 这是更有趣的问题 (7认同)

Fir*_*his 7

遗憾的是,没有自动方法在C++中序列化对象.这是因为任何序列化引擎都需要能够在运行时"理解"自定义对象,而C++不包含必要的信息.另一方面,Java和.Net有所谓的反射.此机制允许任何人在运行时浏览任意对象的数据结构.

所有这些并不意味着没有办法用相对较少的努力来序列化C++对象.以标准C++流库为例.通过写作

int x = 2010;
cout << x << endl;
Run Code Online (Sandbox Code Playgroud)

你实际上序列化int类型的对象.可以扩展此机制以支持您的自定义类.这只是通过重载operator <<来完成的.它不如Java序列化那么好,但它也非常方便.

还有一些库使它更简单.正如有人提到的那样,boost序列化库做得很好.使用boost序列化看起来与使用iostream非常相似,但它解决了标准流固有的一些问题.


Mar*_*ell 5

Google 的协议缓冲区在核心包中提供了 C++ 实现;作为一个很好的好处,您可以与许多其他语言共享此数据- 但您将仅限于使用生成的类型而不是您自己的类型(其他语言的某些序列化引擎支持)。

实际上,这不是问题,因为(如有必要)您可以将生成的类型视为与实际域对象孪生的 DTO 。