#include <google/protobuf/dynamic_message.h>
namespace google::protobuf
Define uma implementação de Message que pode emular tipos que não são conhecidos no momento da compilação.
Turmas neste arquivo | |
---|---|
Cria implementações de Message que podem emular tipos que não são conhecidos no momento da compilação. | |
Ajuda para calcular uma lista classificada de entradas do mapa por reflexão. |
classe DynamicMessageFactory: public MessageFactory
#include <google/protobuf/dynamic_message.h>
namespace google::protobuf
Cria implementações de Message que podem emular tipos que não são conhecidos no momento da compilação.
Às vezes, você quer saber lidar com tipos de protocolo que não conhece no momento da compilação. Seria ótimo poder criar um objeto Message que implemente o tipo de mensagem fornecido por qualquer Descriptor arbitrário. A DynamicMessage fornece isso.
O que acontece é que uma DynamicMessage precisa construir informações extras sobre seu tipo para funcionar. A maioria dessas informações pode ser compartilhada entre todas as DynamicMessages do mesmo tipo. Contudo, armazenar essas informações em cache em algum tipo de mapa global não seria uma boa ideia, uma vez que as informações armazenadas em cache de um descritor específico podem sobreviver ao próprio descritor. Para evitar esse problema, o DynamicMessageFactory encapsula esse "cache". Todas as DynamicMessages do mesmo tipo criadas na mesma fábrica compartilham os mesmos dados de suporte. Os descritores usados em uma fábrica específica precisam sobreviver à fábrica.
Participantes | |
---|---|
| DynamicMessageFactory() Crie uma DynamicMessageFactory que pesquisa extensões no DescriptorPool em que o destinatário é definido. |
| DynamicMessageFactory(const DescriptorPool * pool) |
| ~DynamicMessageFactory() |
void | SetDelegateToGeneratedFactory(bool enable) Chame essa função para informar o DynamicMessageFactory que, se ele receber um descritor para o qual: mais... |
implementa MessageFactory | |
virtual const Message * | GetPrototype(const Descriptor * type) |
DynamicMessageFactory::DynamicMessageFactory(
const DescriptorPool * pool)
const DescriptorPool * pool)
Crie uma DynamicMessageFactory que pesquise extensões no DescriptorPool fornecido.
OBSOLETO: use CodedInputStream::SetExtensionRegistry() para instruir o analisador a procurar extensões em um pool alternativo. No entanto, isso quase nunca é o que você quer fazer. Quase todos os usuários devem usar o construtor zero-arg.
void DynamicMessageFactory::SetDelegateToGeneratedFactory(
bool enable)
bool enable)
Chame essa função para informar a DynamicMessageFactory que, se ela receber um descritor para o qual:
d->file()->pool() == DescriptorPool::generated_pool(),
ele precisa delegar ao MessageFactory::Generated_factory() em vez de construir uma implementação dinâmica da mensagem. Teoricamente, não há nada de errado em fazer isso, então ele pode se tornar o padrão no futuro.
virtual const Message * DynamicMessageFactory::GetPrototype(
const Descriptor * type)
const Descriptor * type)
Com um Descriptor fornecido, cria a Message padrão (prototipo) desse tipo.
Em seguida, você pode chamar o método New() dessa mensagem para criar uma mensagem mutável desse tipo.
Chamar esse método duas vezes com o mesmo Descriptor retorna o mesmo objeto. O objeto retornado permanece como propriedade da fábrica e será destruído quando a fábrica for destruída. Além disso, todos os objetos criados chamando o método New() do protótipo compartilham alguns dados com o protótipo, portanto, eles precisam ser destruídos antes que a DynamicMessageFactory seja destruída.
O descritor fornecido precisa continuar existindo sem a mensagem retornada. Portanto, é necessário que sobreviva à DynamicMessageFactory.
O método é thread-safe.
classe DynamicMapSorter
#include <google/protobuf/dynamic_message.h>
namespace google::protobuf
Ajuda para calcular uma lista classificada de entradas do mapa por reflexão.
Participantes | |
---|---|
static std::vector< const Message * > | Sort(const Message & message, int map_size, const Reflection * reflection, const FieldDescriptor * field) |