嘿所以我想我对boost :: serialize:
的目的有点困惑必须为你计划保存的每个类添加一个boost :: serialize函数似乎有点挫败了库的目的,而不是提升 /减少开发时间似乎它会添加大量的时间,因为您必须进入并编辑您使用的每个库中每个类的源,因此它具有序列化功能。
我打算将它用于SFML / Box2D游戏,但是现在我想到这一点后我还有第二个想法.... 我使用的库错了吗? < / p>
看起来std :: fstream会是一个更好的主意,因为它不需要任何功能或更改你要保存的任何类,我可以设计一个“保存课程。”
答案 0 :(得分:6)
fstream
,无论在这种情况下是什么意思,你还是要做同样的事。您不一定需要将保存/加载函数实现为类成员 - 文档说明如何将它们作为自由函数。
答案 1 :(得分:2)
直接写入标准流仍然需要编写序列化/反序列化函数对。不仅标准库的iostream组件不支持自定义类的I / O,而只是写入和读回sizeof(yourObject)字节是行不通的。想想如果你的类包含指针成员会发生什么。
此外,序列化库提供了支持不同格式和版本控制等功能,这可能很有用。
答案 2 :(得分:0)
似乎std :: fstream会是一个更好的主意,因为它不需要对你要保存的任何类进行任何功能或更改,我可以设计一个“保存类”。
做什么更好的主意?
序列化通常用于保存和恢复对象的状态,而不是任意数据。它的目的是能够获取一袋对象并生成一个文件,以便以后可以从该文件中自动重建这些对象。
如果您可以将要保存的所有信息整理为“保存类”,则不需要 序列化。
此外,您不能只是将一个类写入流;您必须实现operator<<
重载或其他一些功能来保存其数据并加载回来。是的,您可以使用memcpy
抛出对象的位,但这并不完全安全。而且“不完全安全”,我的意思是“你不应该这样做,除非你真的,真的知道你在做什么。”