OBSERVAÇÃO:este site foi descontinuado. O site será desativado após 31 de janeiro de 2023, e o tráfego será redirecionado para o novo site em https://protobuf.dev. Enquanto isso, as atualizações serão feitas apenas para protobuf.dev.

mensagem_dinâmica.h

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

#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)
Crie uma DynamicMessageFactory que pesquise extensões no DescriptorPool fornecido. mais...
~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)
Com um Descriptor fornecido, cria a Message padrão (prototipo) desse tipo. mais...

DynamicMessageFactory::DynamicMessageFactory(
        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)

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)

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)