无法将对象反序列化为其 class,但只能作为其父对象
Unable to deserialize object as its class, but only as its parent's
我有一个服务器接收使用 boost 序列化 text_archive 序列化的数据。到达的数据可以是以下 MB_BPRequest
或 MB_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);
}
奇怪的是,如果我使用基础 class:
,它只会反序列化存档
MB_BPMessage req;
archive >> req;
request_callback_(/*cast somehow*/req);
否则它会抛出 "Input stream error"。
问题是我无法将 MB_BPMessage
转换为 MB_BPRequest
或 MB_BPResponse
,因为编译器会抛出错误。
我有兴趣听听解决此问题的其他方法。
您只能通过指针对多态类型进行(反)序列化。参见
特别是如果你真的必须通过引用序列化这些,你将不得不手动处理所有权语义:
We address these questions by serializing references as though they were pointers.
我有一个服务器接收使用 boost 序列化 text_archive 序列化的数据。到达的数据可以是以下 MB_BPRequest
或 MB_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);
}
奇怪的是,如果我使用基础 class:
,它只会反序列化存档 MB_BPMessage req;
archive >> req;
request_callback_(/*cast somehow*/req);
否则它会抛出 "Input stream error"。
问题是我无法将 MB_BPMessage
转换为 MB_BPRequest
或 MB_BPResponse
,因为编译器会抛出错误。
我有兴趣听听解决此问题的其他方法。
您只能通过指针对多态类型进行(反)序列化。参见
特别是如果你真的必须通过引用序列化这些,你将不得不手动处理所有权语义:
We address these questions by serializing references as though they were pointers.