用二进制文件实现复杂对象C++
我有一个名为widget的虚拟基类,它有一些派生类。我编写代码将其打印到屏幕上:用二进制文件实现复杂对象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
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.