Este post foi editado pela última vez por Summer em 16-01-2019 às 09:31
1. Qual é o problema técnico a ser resolvido neste artigo?
Resolva o problema da técnica anterior de que, ao analisar documentos XML em linguagem C++, as tags da classe base dos dados derivados que aparecem no documento XML original só conseguem analisar os dados da classe base de acordo com o tipo de classe base segundo o método convencional de análise, mas não conseguem analisar completamente os dados derivados da classe.
2. Formação técnica
Na arte anterior, use boost::serialização para transferir classes derivadas com um ponteiro de classe base ou use BOOST_CLASS_EXPORT macro.
Ambos os esquemas acima em tecnologias existentes são baseados no mecanismo de classes abstratas, mas como classes abstratas não podem ser instanciadas como objetos concretos que podem ser usados, objetos declarados como classes base em documentos XML não podem ser analisados. A presente invenção tem como objetivo garantir que os dados tanto do próprio objeto de classe base quanto do objeto de classe derivada marcados pelo objeto de classe base possam ser corretamente analisados e completamente preservados.
3. O esquema técnico fornecido neste artigo
Este artigo não utiliza o mecanismo de classes abstratas, mas introduz o ponteiro da classe base na classe chamada pela classe base, declara a função de análise sintática da classe base como uma função virtual e chama a função de análise através do ponteiro da classe base no processo de análise sintática, para aplicar polimorfismo e armazenar dinamicamente os dados, e finalmente garante que os dados tanto do objeto da classe base quanto do objeto de classe derivado derivados da classe base possam ser armazenados no ponteiro definido pela classe base. Passos específicos: Passo 1: Código C++ para projetar todas as classes que possam corresponder às tags de dados no documento XML a ser analisado, e analisar os dados XML um a um das tags de nível superior. Passo 2: Para cada tag analisada, determine se existem outras tags que herdam a tag como classe base, ou seja, se o tipo de tag deriva outros tipos de tags; Passo 3: Se for determinado que a tag atual não é herdada como classe base, analise a tag atual de acordo com as etapas normais de análise. Passo 4: Se for determinado que a tag atual é herdada como uma classe base, determine ainda se o conteúdo descrito pela tag da classe base é subordinado ao objeto da classe base ou a um objeto de classe derivada; Passo 5: Se o conteúdo da tag base atual for determinado para descrever o objeto base, analise a tag atual de acordo com os passos normais. Passo 6: Se o conteúdo atual da tag da classe base descrever o objeto de classe derivada, modifique o código para analisar de acordo com o novo método de análise: modificar a estrutura de dados do tipo anterior que define o objeto de classe base e definir o ponteiro da classe base em vez disso; Modificar a função de análise sintática da classe base e declará-la como uma função virtual; Passo 7: Onde o objeto da classe base foi originalmente definido para análise sintática, o ponteiro da classe base é definido em vez disso, e o tipo específico de memória é alocado a ele de acordo com o tipo descrito pelo conteúdo do rótulo, e o ponteiro da classe base é usado para chamar a função de análise e analisar o rótulo atual. Passo 8: Analisar e reproduzir a tag atual para determinar se ainda há tags a serem analisadas; Passo 9: Se for determinado que não há tags a serem analisadas, significa que a análise foi concluída e os dados foram salvos na classe com o maior rótulo do documento XML correspondente na classe C++. Passo 10: Se for determinado que ainda há tags que não foram resolvidas, analise a próxima tag de acordo com a etapa 2.
Fluxograma anexado
4. Resumo
O C++ introduz um ponteiro de classe base para atribuir objetos do tipo correspondente ao conteúdo da tag XML de acordo com se é uma classe base ou uma classe derivada, e usa o ponteiro de classe base definido para chamar uma função de análise declarada como uma função imaginária para analisar o conteúdo da tag da classe base XML. Dessa forma, quando a tag da classe base XML descreve os dados do objeto da classe base, a função de análise da classe base será chamada dinamicamente de acordo com o polimorfismo do C++, e os dados da classe base descritos pela tag da classe base podem ser corretamente analisados e preservados. Quando a tag de classe base XML descreve os dados do objeto de classe derivado, a função de análise de classes derivada será chamada dinamicamente de acordo com o polimorfismo de C++, e os dados de classe derivados descritos pela tag de classe base também podem ser corretamente analisados e preservados.
|