Я использую Protobuf 2 в моем проекте. Я хочу использовать DynamicMessageFactory
создавать сообщения во время выполнения. DynamicMessageFactory
требует Descriptor*
, Я прохожу Descriptor*
изменяемого сообщения сгенерированного класса. В документации сказано, что Descriptor
должен пережить DynamicMessageFactory
что в свою очередь должно пережить сообщение, сгенерированное фабрикой.
Каково время жизни дескриптора сгенерированного класса? Это статический член класса?
Дескрипторы для классов сгенерированного кода / скомпилированных сообщений живут вечно, так что вам должно быть хорошо.
Но если ваши типы соблюдаются, то нет смысла использовать DynamicMessageFactory
, Динамические сообщения намного медленнее, чем сгенерированный код, и сгенерированный код поддерживает весь динамический интерфейс в дополнение к сгенерированному интерфейсу. Вы могли бы использовать созданная фабрика вместо этого, чтобы получить экземпляры сгенерированных сообщений. Или еще более честная стратегия — получить прототип сообщения, вызвав MyType::default_instance()
, а затем передать этот указатель, а не обойти дескриптор.
Если вам нужно смешать некоторые динамические типы с некоторыми сгенерированными типами, также подумайте об использовании DynamicMessageFactory::SetDelegateToGeneratedFactory()
.
Других решений пока нет …