1

我有一个看起来像这样的 C++ 对象

class myClass
{
    vector<OtherClass*> otherClassVector;
    AnotherClass* anotherClassObj;
    // A few other primitive types and functions
}

将其存储到磁盘并以编程方式读回的最佳方法是什么?在二进制模式下使用 fstream 读/写会起作用吗?还是应该使用 boost 序列化?为什么?我不要求存储的文件是人类可读的。

4

3 回答 3

6

使用boost::serialization很简单,而不是编写自己的序列化程序。如果 OtherClass 是具体类型(不是基本类型) - 通过读/写序列化很简单,对于向量 - 只需保存大小而不是数组(如果您的 myClass 没有非 POD 类型),然后存储指向 anotheClassObj 指针的元素......

于 2012-07-31T07:31:31.960 回答
3

ofstream f("filename", std::ios::binary);只有当这些对象是 POD 类型时,您才能序列化对象。

其他任何事情都需要手动处理。举个简单的例子,如果对象包含任何指针,则将保存它们的地址,而不是它们指向的数据。

对于更复杂的类型,您将不得不完全手动序列化它们(编写一个类或函数来保存类中的所有 POD 数据并对所有“特殊”数据做一些棘手的事情),或者使用 boost 序列化。

于 2012-07-31T07:30:36.380 回答
0

C++_Middleware Writer可能很有趣。与其他方法相比,它具有一些优势

于 2012-08-05T04:19:15.597 回答