0

我正在创建一个包含 protobuf 消息解析的库。由于库不知道它将用于哪些消息,它使用google::protobuf::DynamicMessageFactory.

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

换句话说,同样的问题: 我有一个const google::protobuf Message*创建的 viagoogle::protobuf::compiler::Importergoogle::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()确实返回相同的类型名称。

我很感谢任何帮助

4

1 回答 1

0

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

于 2013-01-09T09:11:22.787 回答