我正在创建一个包含 protobuf 消息解析的库。由于库不知道它将用于哪些消息,它使用google::protobuf::DynamicMessageFactory
.
但是,我希望能够将解析的消息传递回程序的其他知道实际消息类型的部分。
换句话说,同样的问题:
我有一个const google::protobuf Message*
创建的 viagoogle::protobuf::compiler::Importer
和google::protobuf::DynamicMessageFactory
. 解析后,我知道消息实际上是 a TestMessage
(并且程序知道该类),我可以以某种方式将其转换Message*
为 a吗?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()
确实返回相同的类型名称。
我很感谢任何帮助