Denne artikel er en spejling af maskinoversættelse, klik venligst her for at springe til den oprindelige artikel.

Udsigt: 13040|Svar: 2

[C++] Teknikker for C++ til at dumpe afledte klasseobjektdata, når XML-fildata parses...

[Kopier link]
Opslået på 16/01/2019 09.22.59 | | | |
Dette indlæg blev sidst redigeret af Summer den 16-1-2019 kl. 09:31

1. Hvad er det tekniske problem, der skal løses i denne artikel?

Løs problemet i den tidligere teknik, at når man parser XML-dokumenter i C++-sproget, kan basisklasse-tags afledte klassedata, der optræder i det oprindelige XML-dokument, kun parse basisklassedataene efter basisklassetypen ifølge den konventionelle parsingmetode, men kan ikke fuldstændigt parse de afledte klassedata.


2. Teknisk baggrund

I tidligere teknik kan man bruge boost::serialization til at overføre afledte klasser med en base-klassepointer eller bruge BOOST_CLASS_EXPORT makro.

Begge ovenstående skemaer i eksisterende teknologier er baseret på den abstrakte klassemekanisme, men da abstrakte klasser ikke kan instansieres som konkrete objekter, der kan bruges, kan objekter deklareret som basisklasser i XML-dokumenter ikke parses. Den foreliggende opfindelse har til formål at sikre, at dataene fra både basisklasseobjektet selv og det afledte klasseobjekt, der er markeret af basisklasseobjektet, kan parses korrekt og fuldstændigt bevares.


3. Det tekniske skema, der gives i denne artikel

Denne artikel bruger ikke den abstrakte klassemekanisme, men introducerer baseklassepointeren i den klasse, der kaldes af baseklassen, erklærer basisklasse-parsingfunktionen som en virtuel funktion og kalder parsing-funktionen gennem baseklasse-pointeren i parsing-processen, for at anvende polymorfi til dynamisk parsning og lagring af dataene, og sikrer endelig, at dataene fra både baseklasseobjektet og det afledte klasseobjekt, der stammer fra baseklassen, kan gemmes i baseklasse-definerede pointer.
Specifikke trin:
Trin 1: C++-kode til at designe alle klasser, der kan svare til datatags i XML-dokumentet, der skal parses, og parse XML-data én ad gangen fra topniveau-tags.
Trin 2: For hver tag-parsed, afgør om der er andre tags, der arver tagget som en baseklasse, dvs. om tag-typen afleder andre tag-typer;
Trin 3: Hvis det fastslås, at det nuværende tag ikke arves som baseklasse, skal det aktuelle tag parses efter de normale parsing-trin.
Trin 4: Hvis det fastslås, at det aktuelle tag arves som en baseklasse, skal yderligere afgøres, om indholdet beskrevet af baseklassetagget er underordnet basisklasseobjektet eller et afledt klasseobjekt;
Trin 5: Hvis indholdet af det aktuelle baseklasse-tag bestemmes til at beskrive basisklasseobjektet, parser det aktuelle tag efter de normale trin.
Trin 6: Hvis indholdet af det aktuelle baseklasse-tag beskriver det afledte klasseobjekt, modificerer koden til at parse i henhold til den nye parsing-metode: ændr datastrukturen for den tidligere type, der definerer baseklasseobjektet, og definer i stedet baseklasse-pointeren; Modificerer basisklasse-parsingfunktionen og erklærer den som en virtuel funktion;
Trin 7: Hvor baseklasseobjektet oprindeligt blev defineret til parsing, defineres baseklassepointeren i stedet, og den specifikke type hukommelse tildeles den i henhold til den type, der beskrives af labelindholdet, og baseklassepointeren bruges til at kalde parsing-funktionen for at parse den aktuelle label.
Trin 8: Parse og spil den aktuelle tag for at afgøre, om der stadig er tags, der skal parses;
Trin 9: Hvis det fastslås, at der ikke er tags, der skal parses, betyder det, at parsingen er afsluttet, og at dataene er gemt i klassen med den højeste label i det tilsvarende XML-dokument i C++-klassen.
Trin 10: Hvis det fastslås, at der stadig er tags, der ikke er løst, parser du det næste tag i henhold til trin 2.

Flowdiagram vedhæftet

4. Resumé

C++ introducerer en baseklasse-pointer til at tildele objekter af den tilsvarende type til XML-tag-indholdet afhængigt af, om det er en baseklasse eller en afledt klasse, og bruger den definerede baseklasse-pointer til at kalde en parsing-funktion erklæret som en imaginær funktion til at parse XML-baseklasse-tagindholdet. På denne måde, når XML-baseklassetagget beskriver baseklasseobjektdataene, vil basisklasseparsingsfunktionen blive kaldt dynamisk i henhold til polymorfien af C++, og basisklassedataene, der beskrives af baseklassetaget, kan parses korrekt og bevares. Når XML-baseklassetagget beskriver de afledte klasseobjektdata, vil den afledte klasseparsingsfunktion blive kaldt dynamisk i henhold til polymorfien af C++, og de afledte klassedata, der beskrives af basisklassetagget, kan også korrekt parses og bevares.





Tidligere:QQ protokolanalyse tutorial til Android/PC
Næste:Demon Spirit Summon V4.1.8 bruges på en afdæmpet måde
Opslået på 16/01/2019 09.26.40 |
Flowchartet er væk
 Udlejer| Opslået på 16/01/2019 09.31.49 |

Flowchartet tilføjer, du ved
Ansvarsfraskrivelse:
Al software, programmeringsmaterialer eller artikler udgivet af Code Farmer Network er kun til lærings- og forskningsformål; Ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal brugerne bære alle konsekvenser. Oplysningerne på dette site kommer fra internettet, og ophavsretstvister har intet med dette site at gøre. Du skal slette ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, så understøt venligst ægte software, køb registrering og få bedre ægte tjenester. Hvis der er nogen overtrædelse, bedes du kontakte os via e-mail.

Mail To:help@itsvse.com