我有一个对象代表我正在编程的游戏中的地面的各个平铺。我还有一个矢量来保存对象的实例。将此列表保存到文件的最佳方法是什么?我可以遍历向量并保存每个x,y坐标以及对象使用的图像,但这看起来有点粗糙。我可以使用boost头文件,但是当我尝试构建并使用其余的boost时,目前有一些主要问题。有什么建议吗?
答案 0 :(得分:1)
C ++没有内置的序列化功能,所以无论你做什么都会有点'原始',一般来说,如果你要保存的对象需要很少或现在构造(如int,浮点等),那么你可以简单地写一次性取出整个矢量,如下:
std::vector <int> data(16, 0);
std::ofstream output("binary.data");
output.write(static_cast<char *>(&(data[0])), data.size()*sizeof(int));
但是,如果您有需要多步构造函数的数据类型(例如std :: string),那么必须遍历每个元素并使用足够的信息将它们单独写出来从磁盘读取时重建对象。
答案 1 :(得分:1)
这对我来说似乎是一个很好的解决方案。格式如下: {x,y,image_filename}也可以使调试变得更容易,因为您可以通过检查验证您的保存代码或加载代码是否导致问题(如果出现任何问题)。 我不认为你可以通过使用二进制解决方案来节省大量空间,因为你最有可能需要完整的image_filename。
您可以查看Boost::Serialization提供的内容。
答案 2 :(得分:0)
我完全赞同Boost::Serialization。您实际上可以选择是否需要文本或二进制格式。我通常在开发/调试期间写入/读取文本存档,然后切换到二进制格式进行部署。请注意,二进制格式在不同体系结构之间不可移植,因此如果存档可移植性是您关心的话,请坚持使用文本格式。
如果您的对象发生了更改,或者您希望序列化派生类,那么这样做非常容易,您也可以进行归档版本控制。实际上没有必要重新实现这个特定的轮子:-)
也许您可以提供有关Boost安装(版本?操作系统?编译器?)遇到的问题的更多信息,当然有人会帮忙。