2017-04-26 19 views
1

我在我的項目中使用Protobuf 2。我想在運行時使用DynamicMessageFactory來創建消息。 DynamicMessageFactory需要Descriptor*。我正在傳遞生成的類的可變消息的Descriptor*。該文件說,Descriptor必須超過DynamicMessageFactory,這反過來應該超過工廠產生的消息。生成的protobuf消息的描述符的生存期是多少?

生成的類的描述符的生存期是多少?它是類的靜態成員嗎​​?

回答

2

生成代碼/編譯的消息類的描述符永遠存在,所以你應該很好。

但是,如果您的類型符合,那麼沒有理由使用DynamicMessageFactory。動態消息比生成的代碼慢得多,生成的代碼除了生成的接口外,還支持整個動態接口。您可以使用the generated factory來獲取生成的消息的實例。或者,更清晰的策略是通過調用MyType::default_instance()來獲取消息的原型,然後傳遞該指針而不是傳遞描述符。

如果您需要將某些動態類型與某些生成的類型混合,請考慮使用DynamicMessageFactory::SetDelegateToGeneratedFactory()