繁体   English   中英

将通过“ DynamicMessageFactory”解析的消息转换为具体的子类型

[英]Convert message parsed via `DynamicMessageFactory` to concrete subtype

我正在创建一个包含protobuf消息解析的库。 由于该库无法确定将使用哪些消息,因此它使用google::protobuf::DynamicMessageFactory解析消息。

但是,我希望能够将解析的消息传递回程序的其他部分,这些部分知道实际的消息类型。

换句话说,同样的问题:我有一个通过google::protobuf::compiler::Importergoogle::protobuf::DynamicMessageFactory创建的const google::protobuf Message* 解析之后,我就知道该消息实际上是一个TestMessage (并且程序知道该类),我可以将Message*转换为TestMessage吗?

我不能简单地dynamic_cast消息,如果消息是用通用的Message::ParseFromXXX解析的,则转换的结果始终为NULL ,因为我猜这是因为这些方法仅返回某种代理对象,并且不知道实际消息类。

我也尝试了以下方法:

//message is a const google::protobuf::Message* parsed using DynamicMessageFactory
TestMessage *tr = new TestMessage;
tr->CopyFrom( *message );

但这以protobuf说“试图合并不同类型的消息”失败。 请注意, tr->GetTypeName()message->GetTypeName()确实返回相同的类型名称。

我很感谢你的帮助

TestMessage实际上是否从Message继承? dynamic_cast返回null的事实表明它没有,这意味着这些类是不相关的,并且尝试从一个类转换为另一个类是没有意义的。 或者,它使用私有继承。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM