如何在c++中序列化带有继承的类

How to Serialize classes with inheritance in C++

本文关键字:继承 序列化 c++      更新时间:2023-10-16

我想序列化一个属于继承的类。我使用c++ 98,没有第三方库。下面是我的类结构:

class Base{
public:
    virtual RunMe()=0;
};
class Derived: public Base{
    virtual RunMe(){
        std::cout << "I am running << std::endl;
    }
};

我能够序列化一个基本类使用ofstream和fstream,通过友元技术。但是我不知道如何在我的基类有一个纯虚函数的情况下实现序列化。

为基类添加序列化支持方法。
您的子类将首先调用基类支持方法,然后调用它们自己的方法。

class Base
{
  public:
    virtual void binary_write(ostream& out) // Serialization support function.
    {
        out.write(&m_base_variable, sizeof(m_base_variable));
    }
  private:
    unsigned int m_base_variable;
};

class Derived
: public Base
{
  public:
    virtual void binary_write(ostream& out) // Serialization support function
    {
        Base::binary_write(out); // Call Base's method first;
        out.write(m_derived_variable, sizeof(m_derived_variable));
    }
  private:
    double m_derived_variable;
};