2016-05-30 73 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等等。