Esta publicación fue editada por última vez por Summer el 16-1-2019 09:31
1. ¿Cuál es el problema técnico que se debe resolver en este artículo?
Resuelve el problema del arte previo de que, al analizar documentos XML en lenguaje C++, las etiquetas de clase base de datos derivados que aparecen en el documento XML original solo pueden analizar los datos de clase base según el tipo de clase base según el método de análisis convencional, pero no pueden analizar completamente los datos de clase derivados.
2. Formación técnica
En el arte anterior, se utiliza boost::serialización para transferir clases derivadas con un puntero de clase base o utiliza BOOST_CLASS_EXPORT macro.
Ambos esquemas anteriores en tecnologías existentes se basan en el mecanismo de clases abstractas, pero dado que las clases abstractas no pueden instanciarse como objetos concretos que puedan usarse, los objetos declarados como clases base en documentos XML no pueden ser analizados. La presente invención pretende garantizar que los datos tanto del objeto de clase base como del objeto de clase derivado marcado por el objeto de clase base puedan ser correctamente analizados y preservados por completo.
3. El esquema técnico proporcionado en este artículo
Este artículo no utiliza el mecanismo de clases abstractas, sino que introduce el puntero de clase base en la clase llamada por la clase base, declara la función de análisis de clase base como una función virtual y llama a la función de análisis a través del puntero de clase base en el proceso de análisis sintáctico, para aplicar polimorfismo y analizar y almacenar dinámicamente los datos, y finalmente asegura que los datos tanto del objeto de clase base como del objeto de clase derivado derivados de la clase base puedan almacenarse en el puntero definido por clase base. Pasos específicos: Paso 1: Código C++ para diseñar todas las clases que puedan corresponder a las etiquetas de datos en el documento XML a analizar, y analizar los datos XML uno por uno a partir de las etiquetas de nivel superior. Paso 2: Para cada etiqueta analizada, determinar si hay otras etiquetas que heredan la etiqueta como clase base, es decir, si el tipo de etiqueta deriva otros tipos de etiquetas; Paso 3: Si se determina que la etiqueta actual no se hereda como clase base, analiza la etiqueta actual según los pasos normales de análisis analizable. Paso 4: Si se determina que la etiqueta actual se hereda como clase base, determinar además si el contenido descrito por la etiqueta de clase base es subordinado al objeto de clase base o a un objeto de clase derivada; Paso 5: Si se determina que el contenido de la etiqueta de clase base actual describe el objeto de clase base, analiza la etiqueta actual según los pasos normales. Paso 6: Si el contenido actual de la etiqueta de clase base describe el objeto de clase derivada, modifica el código para analizar según el nuevo método de análisis sintáctico: modifica la estructura de datos del tipo anterior que define el objeto de clase base y define el puntero de clase base en su lugar; Modificar la función de análisis de clase base y declararla como una función virtual; Paso 7: Donde el objeto de clase base se definió originalmente para el análisis sintáctico, se define el puntero de clase base en su lugar, y se asigna el tipo específico de memoria según el tipo descrito por el contenido de la etiqueta, y el puntero de clase base se utiliza para llamar a la función de análisis y analizar la etiqueta actual. Paso 8: Analizar y reproducir la etiqueta actual para determinar si aún quedan etiquetas por analizar; Paso 9: Si se determina que no hay etiquetas que analizar, significa que el análisis se ha completado y los datos se han guardado en la clase con la etiqueta más alta del documento XML correspondiente en la clase C++. Paso 10: Si se determina que aún quedan etiquetas sin resolverse, analiza la siguiente etiqueta según el paso 2.
Diagrama de flujo adjunto
4. Resumen
C++ introduce un puntero de clase base para asignar objetos del tipo correspondiente al contenido de la etiqueta XML según si es una clase base o una clase derivada, y utiliza el puntero de clase base definido para llamar a una función de análisis declarada como una función imaginaria para analizar el contenido de la etiqueta de clase base XML. De este modo, cuando la etiqueta de clase base de XML describe los datos del objeto de clase base, la función de análisis de clase base se llamará dinámicamente según el polimorfismo de C++, y los datos de clase base descritos por la etiqueta de clase base podrán analizarse y preservarse correctamente. Cuando la etiqueta de clase base de XML describe los datos derivados del objeto de clase, la función de análisis de clases derivadas se llamará dinámicamente según el polimorfismo de C++, y los datos de clase derivados descritos por la etiqueta de clase base también pueden analizarse y preservarse correctamente.
|