2017-04-26 66 views
1

我在我的项目中使用Protobuf 2。我想在运行时使用DynamicMessageFactory来创建消息。 DynamicMessageFactory需要Descriptor*。我正在传递生成的类的可变消息的Descriptor*。该文件说,Descriptor必须超过DynamicMessageFactory,这反过来应该超过工厂产生的消息。生成的protobuf消息的描述符的生存期是多少?

生成的类的描述符的生存期是多少?它是类的静态成员吗​​?

回答

2

生成代码/编译的消息类的描述符永远存在,所以你应该很好。

但是,如果您的类型符合,那么没有理由使用DynamicMessageFactory。动态消息比生成的代码慢得多,生成的代码除了生成的接口外,还支持整个动态接口。您可以使用the generated factory来获取生成的消息的实例。或者,更清晰的策略是通过调用MyType::default_instance()来获取消息的原型,然后传递该指针而不是传递描述符。

如果您需要将某些动态类型与某些生成的类型混合,请考虑使用DynamicMessageFactory::SetDelegateToGeneratedFactory()