C++将一个对象写入一个文件,然后再将其读入?

Hun*_*ves 9 c++ serialization object

可能重复:
如何在c ++中序列化?
如何在C++中实现序列化

这些天我越来越多地使用C++,并且此时只有一些关于ofstream的经验.大多数所述经验都是对变量进行简单的文件输出,并使用ifstream将其读回.我没做过的是任何有物体的东西.

让我们假设我有一个经常被写入的对象(比如游戏,对象就是角色)每次击中角色时,每次击败他们获得经验的敌人时,都会重新编写hp. ...我的基本想法是编写一个简单的基于文本的地下城爬行游戏.但是我如何制作某种自动保存文件?我是否只是将对象的每个属性单独写入文件,然后从那里移到更大更好的位置?如果我现在必须这样做,那就是我要去做的事情,但是我不禁感到有一种比这更简单的方式....

有人帮我把整个对象的内容(以及它各自的属性)输出到文件中吗?

Mar*_*ett 8

您可以通过将对象的内容复制到内存中来将对象写入文件.

但后来你遇到了棘手的问题!您不能复制指向内存的任何项目,因为当您将它们加载回来时,它们不拥有该内存.这意味着复制像std :: string这样内部包含自己内存分配的东西也很棘手.

然后,即使使用标准类型,如果您计划在具有不同位数或不同字节顺序的其他计算机上读取它们,也会出现问题.

该过程称为序列化 - 有一些标准技术可以使其更容易.

  • 你甚至不允许`memcpy``std :: string`; 任何不能合法复制的类型在程序的同一次运行中按位**进行复制**不能写入文件/在程序的另一次运行中读回.但即使编写/读回`int`也会将文件格式与架构和特定的编译器选项联系起来,控制`short`,`int`,`long`,`double`的长度...... (2认同)