[英]Convert message parsed via `DynamicMessageFactory` to concrete subtype
我正在创建一个包含protobuf消息解析的库。 由于该库无法确定将使用哪些消息,因此它使用google::protobuf::DynamicMessageFactory
解析消息。
但是,我希望能够将解析的消息传递回程序的其他部分,这些部分知道实际的消息类型。
换句话说,同样的问题:我有一个通过google::protobuf::compiler::Importer
和google::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.