我在我的项目中使用 Protobuf 2。我想用来DynamicMessageFactory
在运行时创建消息。DynamicMessageFactory
需要一个Descriptor*
. 我正在传递Descriptor*
生成类的可变消息。文档说Descriptor
必须比DynamicMessageFactory
工厂生成的消息更长寿。
生成的类的描述符的生命周期是多少?它是类的静态成员吗?
我在我的项目中使用 Protobuf 2。我想用来DynamicMessageFactory
在运行时创建消息。DynamicMessageFactory
需要一个Descriptor*
. 我正在传递Descriptor*
生成类的可变消息。文档说Descriptor
必须比DynamicMessageFactory
工厂生成的消息更长寿。
生成的类的描述符的生命周期是多少?它是类的静态成员吗?
生成代码/编译消息类的描述符永远存在,所以你应该很好。
但是如果你的类型被编译了,那么就没有理由使用DynamicMessageFactory
. 动态消息比生成代码慢很多,生成代码除了生成接口外还支持整个动态接口。您可以改用生成的工厂来获取生成消息的实例。或者,更简洁的策略是通过调用来获取消息的原型MyType::default_instance()
,然后传递该指针而不是传递描述符。
如果您需要将一些动态类型与一些生成的类型混合,也可以考虑使用DynamicMessageFactory::SetDelegateToGeneratedFactory()
.