2016-05-30 5 views
1

私はParentとDerivedという2つのクラスを持っています。私はバイナリファイルからそれらを読み込んだり、読み込んだりすることができます。どのようにアイデアやコードスニペットを手伝ってください。仮想メンバーを持つクラスから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など多くのものがあります。

関連する問題