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