保存矢量对象文件c++
Save vector of Objects to file C++
我有一个对象,代表我正在编程的游戏中地面的各个瓷砖。我也有一个矢量保存对象的实例。将此列表保存到文件的最佳方法是什么?我可以循环遍历向量,保存每个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安装(版本)中遇到的问题的信息?操作系统?编译器?),肯定有人会帮忙。
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 文本文件中的单词链表
- CMake-按正确顺序将项目与C运行时对象文件链接
- 使用新行和不使用新行读取文件
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 挂起和取消挂起一个文件DLL
- 如何确定我已使用非编码文件到达 EOF?
- 命名空间中具有.h和.cpp文件的类
- 如何使用ndk-build.cmd构建Android.so文件
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 读取文件并输入到矢量中
- 在C++中查找文件
- c++库的公共头文件中应该包含什么
- 用c++从输入文件中读取另一行
- Cppcheck生成xml转储文件
- 读取文件的最后一行并输入到链接列表时出错
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- 如何将内容数组写入文本文件?
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到