Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 13040|Svare: 2

[C++] Teknikker for at C++ kan dumpe avledede klasseobjektdata når man parser XML-fildata...

[Kopier lenke]
Publisert på 16.01.2019 09:22:59 | | | |
Dette innlegget ble sist redigert av Summer 16.019.2019 kl. 09:31

1. Hva er det tekniske problemet som skal løses i denne artikkelen?

Løs problemet i den tidligere teknikken at når man parser XML-dokumenter i C++-språket, kan baseklasse-taggene som vises i det opprinnelige XML-dokumentet bare parse baseklassedataene etter baseklassetypen i henhold til den konvensjonelle parsingmetoden, men kan ikke fullstendig analysere de avledede klassedataene.


2. Teknisk bakgrunn

I tidligere teknikk, bruk boost::serialization for å overføre avledede klasser med en baseklassepeker eller bruk BOOST_CLASS_EXPORT makro.

Begge de ovennevnte skjemaene i eksisterende teknologier er basert på den abstrakte klassemekanismen, men siden abstrakte klasser ikke kan instansieres som konkrete objekter som kan brukes, kan objekter deklarert som basisklasser i XML-dokumenter ikke parses. Denne oppfinnelsen er ment å sikre at dataene til både baseklasseobjektet selv og det avledede klasseobjektet merket av baseklasseobjektet kan parses korrekt og fullstendig bevares.


3. Det tekniske skjemaet som gis i denne artikkelen

Denne artikkelen bruker ikke den abstrakte klassemekanismen, men introduserer baseklassepekeren i klassen som kalles av baseklassen, erklærer basisklasseparsingsfunksjonen som en virtuell funksjon, og kaller parsingsfunksjonen gjennom baseklassepekeren i parsingsprosessen, slik at polymorfi dynamisk kan parse og lagre dataene, og til slutt sikrer at dataene til både baseklasseobjektet og det avledede klasseobjektet som er avledet fra baseklassen kan lagres i den baseklassedefinerte pekeren.
Spesifikke trinn:
Trinn 1: C++-kode for å designe alle klasser som kan tilsvare datataggene i XML-dokumentet som skal parses, og parse XML-data én etter én fra toppnivåtaggene.
Trinn 2: For hver tag-parsed, avgjør om det finnes andre tagger som arver taggen som en baseklasse, det vil si om tag-typen stammer fra andre tag-typer;
Trinn 3: Hvis det fastslås at den nåværende taggen ikke arves som en basisklasse, analyser den nåværende taggen i henhold til de normale parsingstegene.
Trinn 4: Hvis det fastslås at den nåværende taggen arves som en baseklasse, skal videre avgjøres om innholdet beskrevet av baseklassetaggen er underordnet baseklasseobjektet eller et avledet klasseobjekt;
Trinn 5: Hvis innholdet i den nåværende baseklassetaggen bestemmes for å beskrive baseklasseobjektet, analyser den nåværende taggen i henhold til de normale stegene.
Trinn 6: Hvis innholdet i den nåværende baseklassetaggen beskriver det avledede klasseobjektet, modifiser koden til å parse i henhold til den nye parsingmetoden: endre datastrukturen til den forrige typen som definerer baseklasseobjektet og definer baseklassepekeren i stedet; Modifiser basisklasse-parsingsfunksjonen og erklærer den som en virtuell funksjon;
Trinn 7: Der baseklasseobjektet opprinnelig ble definert for parsing, defineres baseklassepekeren i stedet, og den spesifikke typen minne tildeles den i henhold til typen beskrevet av etikettinnholdet, og baseklassepekeren brukes til å kalle parsingsfunksjonen for å parse den nåværende etiketten.
Trinn 8: Analyser og spill den nåværende taggen for å finne ut om det fortsatt er tagger som skal analyseres;
Trinn 9: Hvis det fastslås at det ikke finnes noen tagger som skal analyseres, betyr det at parsingen er fullført og dataene er lagret i klassen med høyest etikett i det tilsvarende XML-dokumentet i C++-klassen.
Trinn 10: Hvis det fastslås at det fortsatt er tagger som ikke er løst, parse neste tagg i henhold til steg 2.

Flytskjema vedlagt

4. Sammendrag

C++ introduserer en baseklassepeker for å tildele objekter av tilsvarende type til XML-taginnholdet avhengig av om det er en baseklasse eller en avledet klasse, og bruker den definerte baseklassepekeren til å kalle en parsingfunksjon deklarert som en imaginær funksjon for å parse innholdet i XML-baseklassen. På denne måten, når XML-baseklassetaggen beskriver baseklasseobjektdataene, vil baseklasseparsing-funksjonen bli dynamisk kalt i henhold til polymorfismen til C++, og baseklassedataene beskrevet av baseklassetaggen kan parses og bevares korrekt. Når XML-baseklassetaggen beskriver de avledede klasseobjektdataene, vil den avledede klasseparsingsfunksjonen bli dynamisk kalt i henhold til polymorfismen til C++, og de avledede klassedataene beskrevet av baseklassetaggen kan også parses og bevares korrekt.





Foregående:QQ-protokollanalyseveiledning for Android/PC
Neste:Demon Spirit Summon V4.1.8 brukes på en lavmælt måte
Publisert på 16.01.2019 09:26:40 |
Flytskjemaet er borte
 Vert| Publisert på 16.01.2019 09:31:49 |
Publisert 16.01.2019 09:26
Flytskjemaet er borte

Flytskjemaet legger til, du vet
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com