2016-05-30 33 views
1

我有两个类:Parent和Derived。我希望能够保存并从二进制文件中读取/读取它们,或将它们传输。请帮助想法或代码片段如何做。用虚拟成员从课堂制作POD

class Parent { 
public: 
    virtual int func1(){ return 1; } 
    virtual unsigned func2() = 0; 
    std::string asd; 
} 

class Derived : public Parent { 
public: 
    unsigned func2(){ return 2; } 
    bool boo; 
} 

保存到二进制文件

Parent *obj = new Derived; 
write_to_file(obj, sizeof(*obj)); 

然后从文件

read_from_file(obj, sizeof(*obj)); 

读但是这种方法将覆盖指向虚函数。所以我需要创建没有虚拟的POD类来保存它并从文件中读取。对?为每个Derived创建反映的POD类似乎不是一个好主意。

+1

虚拟函数不是问题(从某种意义上说你可以很容易地解决这个问题),但是'std :: string'是一个问题。你需要决定如何保存它。然后编写代码来序列化和反序列化;谷歌那。 –

+0

不能使用boost.serialization? – Arunmu

回答

0

这个问题没有直接的答案。你应该使用序列化。 C++没有原生的序列化器,如Java或C#。但互联网上有很多开源串行器。例如boost::serialization,s11n等等。