无法将对象反序列化为其类,但仅作为其父类

时间:2015-07-13 15:05:42

标签: 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,因为编译器会抛出错误。

我有兴趣听到解决这个问题的其他方法。

1 个答案:

答案 0 :(得分:1)

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

特别是如果你真的必须通过引用序列化这些,你必须手动处理所有权语义:

  

我们通过序列化引用来解决这些问题,就好像它们是指针一样。