c++ - 无法将对象反序列化为它的类,但只能作为其父类

标签 c++ boost boost-serialization

我有一个服务器接收使用 boost 序列化 text_archive 序列化的数据。到达的数据可以是以下MB_BPRequestMB_BPResponse 之一,它们都扩展MB_BPMessage

所以我有这段代码:

request_callback(MB_BPRequest);
response_callback(MB_BPResponse);

try {
  MB_BPRequest req;
  archive >> req;
  request_callback_(req);
}
catch (std::exception& e) {
  MB_BPResponse resp;
  archive >> resp;
  response_callback_(resp);
}

奇怪的是,如果我使用基类,它只会反序列化存档:

  MB_BPMessage req;
  archive >> req;
  request_callback_(/*cast somehow*/req);

否则它会抛出“输入流错误”。

问题是我无法将 MB_BPMessage 转换为 MB_BPRequestMB_BPResponse,因为编译器会抛出错误。

我有兴趣听听解决此问题的其他方法。

最佳答案

您只能通过指针(反)序列化多态类型。见

特别是如果您确实必须通过引用序列化这些,您将不得不手动处理所有权语义:

We address these questions by serializing references as though they were pointers.

关于c++ - 无法将对象反序列化为它的类,但只能作为其父类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31386947/

相关文章:

c++ - 用户定义的 errno 范围值(POSIX 或特定于 Linux)

c++ - 将 50 位二进制值转换为整数

c++ - Qt,paint image,这会导致内存问题吗?

c++ - 如何从/dev/shm 获取有关可用内存的信息

python - Boost Python 类导出无法在 visual studio 2013 中编译并出现链接错误

c++ - 使用 boost::serialization 跳过层次继承中的中间类

c++ - QtCreator的几个问题

c++ - luabind:如何通过引用将值从 C++ 传递到 lua 函数?

c++ - C++如何从引用中获取值

c++ - 如何使用 boost 序列化检测无效输入?