【发布时间】:2015-10-25 14:23:18
【问题描述】:
在 C 中,数据通常以struct 数据类型组织。这保存在随机访问文件中非常方便,因为您可以在结构上使用sizeof 直接跳到您想要的记录。
我不清楚在 C++ 中执行此操作的最佳方法是什么,其中您有一个包含数据的类(以及一些当然不需要持久化的成员函数)。直接存储类似乎是错误的,因为这当然会包括指向函数的指针以及那些一旦被持久化到文件就是垃圾的东西。
我能想到的另一种方法是将类中需要持久化的成员数据更改为struct,并更改访问器函数以查看内部数据结构。它似乎有点过于交织,但似乎是避免重复每个字段两次的唯一合乎逻辑的方法(一次在单独的struct 中,一次在课堂上)。
这当然会在您拥有继承的那一刻崩溃,并且派生类会添加新字段。尽管这几乎不是 C++ 和随机访问文件特有的问题,而且它在许多其他对象持久性方法(包括其他编程语言中流行的 ORM 包)中面临different possible strategies even when saving to a database table for instance。
人们通常在 C++ 中使用任何“事实上的标准”方法来将类数据保存在文件中吗?无需在所有地方复制东西?
【问题讨论】:
-
不,目前还没有针对 c++ 的序列化标准。不过有一些非常常用的库,例如
boost::archive或 google 协议缓冲区。 -
谢谢。我不是在寻找这样的标准。如果您有一个包含一些数据的类并且您需要将其保存到文件中(并且以后能够查找它),人们通常会做什么。人们只是复制一切吗?
-
好吧,如果你真的需要随机访问,即使我提到的那些库实际上也不合适。您最可能需要的是数据库存储。
-
我不太了解您问题中的某些部分:类成员函数通常是无状态的,因此不必持久化。您只需要存储对象数据,与 C 结构相同。
-
顺便说一句,只是将纯 c 结构写入文件,也可能有同样的问题,如指针字段、字节序问题等。
标签: c++ class struct random-access randomaccessfile