是否可以自动序列化C++;对象 是否有类似于java/.NET序列化的C++(?)/p>< P> Boost包含一个。我自己没有使用过,但通常Boost库工作得很好。 < P>不幸的是,C++中没有自动序列化对象的方法。这是因为任何序列化引擎都需要能够在运行时“理解”自定义的对象,C++不包含为此所需的信息。另一方面,Java和.Net具有所谓的反射。这种机制允许任何人在运行时浏览任意对象的数据结构 这并不意味着没有办法用相对较少的努力来序列化C++对象。以标准C++流库为例。通过写作 int x = 2010; cout << x << endl; intx=2010; Cuth谷歌在核心包中提供C++实现;作为一个很好的好处,您可以与共享此数据,但您将仅限于使用生成的类型,而不是您自己的类型(其他语言中的一些序列化引擎支持这种类型)

是否可以自动序列化C++;对象 是否有类似于java/.NET序列化的C++(?)/p>< P> Boost包含一个。我自己没有使用过,但通常Boost库工作得很好。 < P>不幸的是,C++中没有自动序列化对象的方法。这是因为任何序列化引擎都需要能够在运行时“理解”自定义的对象,C++不包含为此所需的信息。另一方面,Java和.Net具有所谓的反射。这种机制允许任何人在运行时浏览任意对象的数据结构 这并不意味着没有办法用相对较少的努力来序列化C++对象。以标准C++流库为例。通过写作 int x = 2010; cout << x << endl; intx=2010; Cuth谷歌在核心包中提供C++实现;作为一个很好的好处,您可以与共享此数据,但您将仅限于使用生成的类型,而不是您自己的类型(其他语言中的一些序列化引擎支持这种类型),c++,serialization,persistence,oop,C++,Serialization,Persistence,Oop,实际上,这不是问题,因为(如果必要的话)您可以将生成的类型视为与实际域对象成对的DTO。Boost.Serialization是一个非常好的库,它还支持基本的版本控制—自动序列化永远不可能做到这一点。因为我碰巧需要更好的版本控制,所以我实际上编写了我自己的序列化库,它遵循Boost.serialization样式(因为Boost.serialization的作者对改进它不感兴趣) 请注意,如果添加了少量帮助器数据,您还可以将序列化函数用于其他目的,如GUI或web表单生成(请参见Boost.se

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

Boost.Serialization是一个非常好的库,它还支持基本的版本控制—自动序列化永远不可能做到这一点。因为我碰巧需要更好的版本控制,所以我实际上编写了我自己的序列化库,它遵循Boost.serialization样式(因为Boost.serialization的作者对改进它不感兴趣)

请注意,如果添加了少量帮助器数据,您还可以将序列化函数用于其他目的,如GUI或web表单生成(请参见Boost.serialization如何处理XML)


需要注意的是,保存整个结构的流行方法(通过将它们转换成char和写入sig of(Stult)字节)是完全不可移植的,它不支持版本控制,如果结构包含任何指针或C++(非POD)对象,则它会中断。(实际上,实现您自己的侵入式或非侵入式RTTI)可以实现与C#/Java相当的自动化水平

请参见此处的详细信息:


我成功地使用了这个:

它在ios和android上对我来说都很好。它是一个只有标题的库,没有外部依赖项,因此使用起来非常方便。我更喜欢它而不是boost,因为我不想导入所有boost依赖项。该库很小,支持XML、JSON、二进制和自定义序列化格式


图书馆(如boost)要求您显式地为基类编写一些序列化和去序列化代码,而集合则是自动处理的。< /P>不,因为C++没有运行时反射。参见SITS答案,一个好的备选方案。正文中,你没有在标题中解决这个问题,这是一个更有趣的问题。标题中的问题的答案是:不,C++没有自动序列化你的对象。