我正在尝试实现反序列化,其中到字段/成员的映射仅在运行时才知道(它很复杂)。无论如何,我想做的事情如下:
Class A
{
public:
int a; // index 0
float b; // index 1
char c; // index 2
}
然后我有两个数组,一个包含字段的索引,另一个包含指示类型的内容。然后我想迭代数组并从字节流写入字段。
抱歉,描述很糟糕,但我只是不知道如何在代码中实现它。任何想法将不胜感激,谢谢!
最佳答案
是的,可以,但是在执行此操作时需要注意两件事。
首先,请确保您从 (const char*)&A.a
开始编写,因为所有编译器都会在对象的开头附加与您无关的内容(Visualc 将 vtable例如那里),如果您从对象的地址开始,您将不会写出您认为的内容。
其次,您可能需要在声明任何需要写入磁盘的类之前执行 #pragma pack(1)
,因为编译器通常会对齐类成员以使 DMA 传输更加高效,并且您可能会最终也遇到了问题。
在动态部分,如果为您想要的每个字段组合创建一个类定义是可以接受的,那么这样做就可以了,否则您最好在类中包含一个哈希表,并且通过将键值对写入文件来序列化/反序列化其内容
关于c++ - 在 C++ 中实现地址albe字段的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14494706/