用二进制文件实现复杂对象C++

用二进制文件实现复杂对象C++,c++,C++,我有一个名为widget的虚拟基类,它有一些派生类。我编写代码将其打印到屏幕上: std::ostream& operator << (std::ostream& os, const Base& base) //output { os << . . . . //some orders for priting the base members Derived1* l = dynamic_cast<Der

我有一个名为widget的虚拟基类,它有一些派生类。我编写代码将其打印到屏幕上:

std::ostream&  operator << (std::ostream& os, const Base& base) //output
    {
        os << . . . . //some orders for priting the base members
        Derived1* l = dynamic_cast<Derived1*>(base);
        Derived2* d = dynamic_cast<Derived2*>(base);
        Derived3* r = dynamic_cast<Derived2*>(base);
        if (c != NULL)
        {
            os << ... / / some ostream orders 
        }

        else if (l != NULL)
        {
                        os << ... / / some ostream orders 

        }

        else if (r != NULL)
        {
            // some orders
        }

        return os;
    }
现在,我想用它来从二进制文件中写入\读取\数据。有没有其他选择呢? 一些成员是动态分配的字符串、向量、指针向量等。。
谢谢

这看起来像是一个家庭作业问题,所以我不会给出任何代码,但会尝试为您指出正确的方向

C字符串如何存储在数组中?您如何知道数组的末尾在哪里? -想想这个。在C字符串中,有一个终止字符'/0',表示字符串的结尾。也许你可以在每一位数据后写一个终止字符?在您的案例中,像0xFF那样的0可能是有效的数据

或者,向文件中添加一些元数据。e、 g.对于每个向量,在其前面加上每个成员的字节数和成员数的信息:

e、 g

然后,您的解析程序只需要确保每次读取的数据量正确


在不同的数据类型中添加,考虑要存储的所有类型的枚举。存储与数据关联的值。这将允许您有效地指定字符串等。

如果您不想使用现有的库,那么可以先存储数据的大小,然后存储实际数据。
int = 5          ->  0x01 0x02 0x05            //one,   two byte value,  value  = 5.
int[3] = {5,6,7} ->  0x03 0x02 0x05 0x06 0x07  //three, two byte values, values = 5. 6 and 7.