生成的protobuf消息的描述符的生命周期是多少?

时间:2017-04-26 14:48:43

标签: c++ protocol-buffers proto

我在我的项目中使用Protobuf 2。我想使用DynamicMessageFactory在运行时创建消息。 DynamicMessageFactory需要Descriptor*。我正在传递生成类的可变消息的Descriptor*。文档说明Descriptor必须比DynamicMessageFactory更长,class BooksController < ApplicationController def index @books Book.all.joins(:user) end end 反过来应该比工厂生成的消息更长。

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

1 个答案:

答案 0 :(得分:2)

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

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

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