Šis raksts ir mašīntulkošanas spoguļraksts, lūdzu, noklikšķiniet šeit, lai pārietu uz oriģinālo rakstu.

Skats: 13040|Atbildi: 2

[C++] C++ paņēmieni, lai izgāztu atvasinātos klases objekta datus, parsējot XML faila datus...

[Kopēt saiti]
Publicēts 16.01.2019 09:22:59 | | | |
Šo ziņu pēdējo reizi rediģēja Vasara 2019-1-16 09:31

1. Kāda ir tehniskā problēma, kas jārisina šajā rakstā?

Atrisināt problēmu agrākajā tehnikā, ka, parsējot XML dokumentus C++ valodā, bāzes klases tagi atvasinātie klases dati, kas parādās oriģinālajā XML dokumentā, var parsēt tikai bāzes klases datus atbilstoši bāzes klases tipam saskaņā ar parasto parsēšanas metodi, bet nevar pilnībā parsēt atvasinātos klases datus.


2. Tehniskais pamatojums

Iepriekšējā tehnikā izmantojiet boost::serialization, lai pārsūtītu atvasinātās klases ar pamatklases rādītāju vai BOOST_CLASS_EXPORT makro.

Abas iepriekš minētās shēmas esošajās tehnoloģijās ir balstītas uz abstraktu klases mehānismu, bet, tā kā abstraktās klases nevar instancēt kā konkrētus objektus, kurus var izmantot, objektus, kas XML dokumentos deklarēti kā bāzes klases, nevar parsēt. Šis izgudrojums ir paredzēts, lai nodrošinātu, ka gan paša bāzes klases objekta, gan atvasinātā klases objekta datus, kas atzīmēti ar bāzes klases objektu, var pareizi parsēt un pilnībā saglabāt.


3. Šajā pantā paredzētā tehniskā shēma

Šajā rakstā netiek izmantots abstraktās klases mehānisms, bet tiek ieviests bāzes klases rādītājs klasē, ko sauc bāzes klase, deklarē bāzes klases parsēšanas funkciju kā virtuālu funkciju un izsauc parsēšanas funkciju caur bāzes klases rādītāju parsēšanas procesā, lai piemērotu polimorfismu, lai dinamiski parsētu un saglabātu datus, un visbeidzot nodrošina, ka gan bāzes klases objekta, gan atvasinātā klases objekta datus var saglabāt bāzes klases definētajā rādītājā.
Konkrēti soļi:
1. solis: C++ kods, lai noformētu visas klases, kas var atbilst parsējamā XML dokumenta datu tagiem, un parsēt XML datus pa vienam no augstākā līmeņa tagiem.
2. solis: katram parsētajam tagam nosakiet, vai ir citi tagi, kas manto tagu kā pamatklasi, tas ir, vai taga tips atvasina citus tagu tipus;
3. solis: Ja tiek noteikts, ka pašreizējais tags nav mantots kā pamatklase, parsējiet pašreizējo tagu saskaņā ar parastajām parsēšanas darbībām.
4. solis: Ja tiek noteikts, ka pašreizējais tags ir pārmantots kā bāzes klase, tālāk nosakiet, vai pamatklases taga aprakstītais saturs ir pakārtots pamatklases objektam vai atvasinātam klases objektam;
Step 5: Ja pašreizējā bāzes klases taga saturs ir noteikts, lai aprakstītu bāzes klases objektu, parsējiet pašreizējo tagu saskaņā ar parastajām darbībām.
6. solis: Ja pašreizējais pamatklases taga saturs apraksta atvasināto klases objektu, modificējiet kodu, lai parsētu saskaņā ar jauno parsēšanas metodi: modificējiet iepriekšējā tipa datu struktūru, kas definē bāzes klases objektu, un tā vietā definējiet bāzes klases rādītāju; Modificējiet bāzes klases parsēšanas funkciju un pasludiniet to par virtuālu funkciju;
7. solis: Ja bāzes klases objekts sākotnēji tika definēts parsēšanai, tā vietā tiek definēts bāzes klases rādītājs, un tam tiek piešķirts konkrētais atmiņas veids atbilstoši etiķetes satura aprakstītajam tipam, un bāzes klases rādītājs tiek izmantots, lai izsauktu parsēšanas funkciju, lai parsētu pašreizējo etiķeti.
8. solis: Analizējiet un atskaņojiet pašreizējo tagu, lai noteiktu, vai joprojām ir jāparsē tagi;
9. solis: Ja tiek konstatēts, ka nav analizējamu tagu, tas nozīmē, ka parsēšana ir pabeigta un dati ir saglabāti klasē ar atbilstošā XML dokumenta augstāko etiķeti C++ klasē.
10. solis: Ja tiek konstatēts, ka joprojām ir atzīmes, kas nav atrisinātas, parsējiet nākamo tagu saskaņā ar 2. darbību.

Pievienota plūsmas diagramma

4. Kopsavilkums

C++ ievieš bāzes klases rādītāju, lai piešķirtu atbilstoša tipa objektus XML taga saturam atkarībā no tā, vai tā ir pamatklase vai atvasināta klase, un izmanto definēto bāzes klases rādītāju, lai izsauktu parsēšanas funkciju, kas deklarēta kā iedomāta funkcija, lai parsētu XML pamatklases taga saturu. Tādā veidā, kad XML bāzes klases tags apraksta bāzes klases objekta datus, bāzes klases parsēšanas funkcija tiks dinamiski izsaukta saskaņā ar C++ polimorfismu, un bāzes klases taga aprakstītos pamatklases datus var pareizi parsēt un saglabāt. Kad XML bāzes klases tags apraksta atvasinātos klases objekta datus, atvasinātās klases parsēšanas funkcija tiks dinamiski izsaukta atbilstoši C++ polimorfismam, un atvasinātos klases datus, kas aprakstīti ar pamatklases tagu, var arī pareizi parsēt un saglabāt.





Iepriekšējo:QQ protokola analīzes apmācība Android / PC
Nākamo:Demon Spirit Summon V4.1.8 tiek izmantots zemā taustiņā
Publicēts 16.01.2019 09:26:40 |
Blokshēma vairs nav pieejama
 Saimnieks| Publicēts 16.01.2019 09:31:49 |
Publicēts 2019-1-16 09:26
Blokshēma vairs nav pieejama

Blokshēma pievieno jums zināmu
Atruna:
Visa programmatūra, programmēšanas materiāli vai raksti, ko publicē Code Farmer Network, ir paredzēti tikai mācību un pētniecības mērķiem; Iepriekš minēto saturu nedrīkst izmantot komerciāliem vai nelikumīgiem mērķiem, pretējā gadījumā lietotājiem ir jāuzņemas visas sekas. Informācija šajā vietnē nāk no interneta, un autortiesību strīdiem nav nekāda sakara ar šo vietni. Iepriekš minētais saturs ir pilnībā jāizdzēš no datora 24 stundu laikā pēc lejupielādes. Ja jums patīk programma, lūdzu, atbalstiet oriģinālu programmatūru, iegādājieties reģistrāciju un iegūstiet labākus oriģinālus pakalpojumus. Ja ir kādi pārkāpumi, lūdzu, sazinieties ar mums pa e-pastu.

Mail To:help@itsvse.com