c++ - 在 C++ 中实现地址albe字段的最佳方法是什么?

标签 c++ deserialization binary-deserialization

我正在尝试实现反序列化,其中到字段/成员的映射仅在运行时才知道(它很复杂)。无论如何,我想做的事情如下:

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/

相关文章:

c++ - 带有 std::shared_ptr 的 QVariant

c++ - 加速 C++ : Undefined symbols for architecture x86_64

c# - 将Json反序列化为对象异常

c# - 如何确定 Autofac 在解析时使用哪个构造函数

c++ - 将 C++ 函数设为虚函数时出错

c++ - 返回从另一个成员函数调用的 const 引用的函数

c# - 使用不带引号的十六进制值反序列化 JSON

c# - 类型修改时强制二进制反序列化失败

c# - 没有对象类型 'ImagePacket'的程序集ID。序列化异常捕获C#

.net - 二进制序列化命名空间更改