我正在创建一个包含protobuf消息解析的库。由于库无法知道将使用哪些消息,因此它使用google::protobuf::DynamicMessageFactory
解析消息。
但是,我希望能够将解析后的消息传递回程序中了解实际消息类型的其他部分。
换句话说同样的问题:
我通过const google::protobuf Message*
和google::protobuf::compiler::Importer
创建了google::protobuf::DynamicMessageFactory
。在解析之后,我知道该消息实际上是TestMessage
(并且程序知道该类),我可以以某种方式将Message*
转换为TestMessage
吗?
我不能简单地dynamic_cast
消息,如果使用我猜的通用NULL
解析消息,则转换的结果总是Message::ParseFromXXX
因为这些方法只是返回某种代理对象,无法了解实际的消息类。
我也尝试了以下内容:
//message is a const google::protobuf::Message* parsed using DynamicMessageFactory
TestMessage *tr = new TestMessage;
tr->CopyFrom( *message );
但是,当protobuf说“尝试合并不同类型的消息”时,它失败了。请注意,tr->GetTypeName()
和message->GetTypeName()
会返回相同的类型名称。
我很感谢任何帮助
答案 0 :(得分:0)
TestMessage实际上是否继承自Message? dynamic_cast 返回null的事实表明它没有,这意味着这些类是无关的,尝试从一个转换为另一个没有意义。或者它可能使用私有继承。