保存矢量对象文件c++

Save vector of Objects to file C++

本文关键字:文件 c++ 对象 保存      更新时间:2023-10-16

我有一个对象,代表我正在编程的游戏中地面的各个瓷砖。我也有一个矢量保存对象的实例。将此列表保存到文件的最佳方法是什么?我可以循环遍历向量,保存每个x,y坐标和物体使用的图像,但这看起来有点粗糙。我可以使用boost头文件,但当我尝试构建和使用boost的其余部分时,目前有一些主要问题。有什么建议吗?

c++没有内置的序列化功能,所以无论你做什么都会有点"粗糙",一般来说,如果你保存的对象只需要很少的构造(比如int, float等),那么你可以简单地一次写出整个向量,像这样:

std::vector <int> data(16, 0);
std::ofstream output("binary.data");
output.write(static_cast<char *>(&(data[0])), data.size()*sizeof(int));

但是,如果您的数据类型需要多步构造函数(例如std::string),那么必须循环遍历每个元素,并将它们单独写出来,并提供足够的信息,以便在从磁盘读取时重构对象。

对我来说,这似乎是一个足够好的解决方案。格式类似于:{x, y, image_filename}也会使调试更容易一些,因为您可以通过检查来验证您的保存代码或加载代码是否会导致问题(如果出现任何问题)。我不认为您可以通过使用二进制解决方案节省太多空间,因为您很可能需要完整的image_filename。

你可以看看Boost::Serialization提供了什么

我完全支持Boost::Serialization。实际上,您可以选择要文本格式还是二进制格式。我通常在开发/调试期间写入/读取文本存档,然后切换到二进制格式进行部署。请注意,二进制格式在不同的体系结构之间是不可移植的,所以如果您关心存档的可移植性,请坚持使用文本格式。

如果你的对象改变了,或者你希望序列化派生类,这是很容易做到的,你也可以做存档版本控制。真的没有必要重新实现这个特殊的轮子:-)

也许您可以提供更多关于您在Boost安装(版本)中遇到的问题的信息?操作系统?编译器?),肯定有人会帮忙。