将复杂的C ++对象写入文件

时间:2012-07-31 07:24:16

标签: c++ file serialization

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

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

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

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:3)

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

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

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

答案 2 :(得分:0)

C++_Middleware Writer可能会引起关注。它比其他方法some advantages