Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 13040|Antwort: 2

[C++] Techniken, mit denen C++ abgeleitete Klassenobjektdaten beim Parsen von XML-Dateidaten dumpen kann...

[Link kopieren]
Veröffentlicht am 16.01.2019 09:22:59 | | | |
Dieser Beitrag wurde zuletzt von Summer am 16.01.2019 um 09:31 Uhr bearbeitet

1. Welches technische Problem soll in diesem Artikel gelöst werden?

Löse das Problem in der Stand der Technik, dass beim Parsen von XML-Dokumenten in der C++-Sprache die abgeleiteten Basisklassen-Tags, die im ursprünglichen XML-Dokument erscheinen, die Basisklassendaten nur nach dem Basisklassentyp gemäß der herkömmlichen Parsing-Methode parsen können, aber die abgeleiteten Klassendaten nicht vollständig parsen können.


2. Technischer Hintergrund

Im Stand der Technik verwenden Sie boost::serialization, um abgeleitete Klassen mit einem Basis-Klassenzeiger zu übertragen, oder verwenden Sie BOOST_CLASS_EXPORT Makro.

Beide oben genannten Schemata in bestehenden Technologien basieren auf dem abstrakten Klassenmechanismus, aber da abstrakte Klassen nicht als konkrete verwendete Objekte instanziiert werden können, können Objekte, die als Basisklassen in XML-Dokumenten deklariert sind, nicht geparst werden. Die vorliegende Erfindung soll sicherstellen, dass die Daten sowohl des Basisklassenobjekts selbst als auch des abgeleiteten Klassenobjekts, das vom Basisklassenobjekt markiert ist, korrekt geparst und vollständig erhalten werden können.


3. Das in diesem Artikel bereitgestellte technische Schema

Dieses Paper verwendet nicht den abstrakten Klassenmechanismus, sondern führt den Basisklassenzeiger in die von der Basisklasse aufgerufene Klasse ein, deklariert die Basisklassen-Parsingfunktion als virtuelle Funktion und ruft die Parsing-Funktion über den Basisklassenzeiger im Parsing-Prozess auf, um Polymorphismus anzuwenden, um die Daten dynamisch zu parsen und zu speichern, und stellt schließlich sicher, dass die Daten sowohl des Basisklassenobjekts als auch des abgeleiteten Klassenobjekts, das von der Basisklasse abgeleitet ist, im von der Basisklasse definierten Zeiger gespeichert werden können.
Konkrete Schritte:
Schritt 1: C++-Code, um alle Klassen zu entwerfen, die mit den Datentags im XML-Dokument zu parsen sind, und XML-Daten einzeln aus den obersten Tags zu parsen.
Schritt 2: Bestimmen Sie für jedes geparste Tag, ob es andere Tags gibt, die das Tag als Basisklasse erben, also ob der Tag-Typ andere Tag-Typen ableitet;
Schritt 3: Wenn festgestellt wird, dass das aktuelle Tag nicht als Basisklasse vererbt wird, parsieren Sie das aktuelle Tag gemäß den normalen Parsing-Schritten.
Schritt 4: Wenn festgestellt wird, dass das aktuelle Tag als Basisklasse vererbt wird, sollte weiter festgestellt werden, ob der vom Basisklassentag beschriebene Inhalt dem Basisklassenobjekt oder einem abgeleiteten Klassenobjekt untergeordnet ist;
Schritt 5: Wenn der Inhalt des aktuellen Basisklassentags bestimmt ist, um das Basisklassenobjekt zu beschreiben, parsieren Sie das aktuelle Tag gemäß den normalen Schritten.
Schritt 6: Wenn der aktuelle Inhalt des Basisklassentags das abgeleitete Klassenobjekt beschreibt, modifizieren Sie den Code so, dass er gemäß der neuen Parsing-Methode parsen kann: Ändern Sie die Datenstruktur des vorherigen Typs, der das Basisklassenobjekt definiert, und definieren Sie stattdessen den Basisklassenzeiger; Modifiziere die Basisklassen-Parsing-Funktion und deklariere sie als virtuelle Funktion;
Schritt 7: Wo das Basis-Klassen-Objekt ursprünglich für das Parsen definiert wurde, wird stattdessen der Basis-Klassen-Zeiger definiert, und der spezifische Speichertyp wird ihm entsprechend dem vom Label-Inhalt beschriebenen Typ zugewiesen; der Basis-Klassen-Zeiger wird verwendet, um die Parsing-Funktion aufzurufen und das aktuelle Label zu parsen.
Schritt 8: Parsen und spielen Sie den aktuellen Tag, um festzustellen, ob noch Tags zu parsen sind;
Schritt 9: Wenn festgestellt wird, dass keine Tags zu parsen sind, bedeutet das, dass das Parsing abgeschlossen wurde und die Daten in der Klasse mit dem höchsten Label des entsprechenden XML-Dokuments in der C++-Klasse gespeichert wurden.
Schritt 10: Wenn festgestellt wird, dass noch nicht gelöste Tags vorhanden sind, parsen Sie das nächste Tag gemäß Schritt 2.

Angehängtes Flussdiagramm

4. Zusammenfassung

C++ führt einen Basisklassen-Zeiger ein, um Objekte des entsprechenden Typs dem XML-Tag-Inhalt je nach Basisklasse oder abgeleiteter Klasse zuzuweisen, und verwendet den definierten Basisklassenzeiger, um eine als imaginäre Funktion deklarierte Parsingfunktion aufzurufen, um den Inhalt des XML-Basisklassentags zu parsen. Auf diese Weise wird die Basisklassen-Parsing-Funktion dynamisch gemäß dem Polymorphismus von C++ aufgerufen, wenn das XML-Basisklassen-Tag die Basis-Objektdaten beschreibt. Wenn das XML-Basisklassen-Tag die abgeleiteten Klassenobjektdaten beschreibt, wird die abgeleitete Klassenparsing-Funktion dynamisch gemäß dem Polymorphismus von C++ aufgerufen, und die vom Basisklassen-Tag beschriebenen abgeleiteten Klassendaten können ebenfalls korrekt geparst und erhalten werden.





Vorhergehend:QQ-Protokollanalyse-Tutorial für Android/PC
Nächster:Dämonengeist-Beschwörung V4.1.8 wird auf zurückhaltende Weise eingesetzt
Veröffentlicht am 16.01.2019 09:26:40 |
Das Flussdiagramm ist weg
 Vermieter| Veröffentlicht am 16.01.2019 09:31:49 |

Das Flussdiagramm ergänzt, du weißt schon.
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com