To objavo je nazadnje uredila Summer 16. 1. 2019 ob 09:31
1. Kakšen je tehnični problem, ki ga je treba rešiti v tem članku?
Rešite problem v predhodni tehniki, da lahko pri razčlenjevanju XML dokumentov v jeziku C++ osnovne oznake razreda, izpeljane podatke razreda, ki se pojavijo v izvirnem XML dokumentu, razčlenjujejo le podatke osnovnega razreda glede na osnovni razred po običajni metodi razčlenjevanja, vendar ne morejo popolnoma razčleniti izpeljanih podatkov razreda.
2. Tehnično ozadje
V prejšnji tehniki uporabite boost::serialization za prenos izpeljanih razredov z osnovnim kazalcem ali uporabite BOOST_CLASS_EXPORT makro.
Obe zgornji shemi v obstoječih tehnologijah temeljita na mehanizmu abstraktnih razredov, vendar ker abstraktnih razredov ni mogoče instancirati kot konkretne objekte, ki jih je mogoče uporabiti, objektov, deklariranih kot osnovne razrede v XML dokumentih, ni mogoče razčlenjevati. Namen tega izuma je zagotoviti, da je mogoče podatke tako osnovnega razreda kot izpeljanega razrednega objekta, označenega z osnovnim razredom, pravilno razčleniti in popolnoma ohraniti.
3. Tehnična shema, predstavljena v tem članku
Ta članek ne uporablja mehanizma abstraktnega razreda, ampak uvaja kazalec osnovnega razreda v razred, ki ga kliče osnovni razred, deklarira funkcijo razčlenjevanja osnovnega razreda kot virtualno funkcijo in pokliče funkcijo razčlenjevanja skozi kazalec osnovnega razreda v procesu razčlenjevanja, da se uporabi polimorfizem za dinamično razčlenjevanje in shranjevanje podatkov ter na koncu zagotovi, da je mogoče podatke tako osnovnega razreda kot izpeljanega objekta razreda, izpeljanega iz osnovnega razreda, shraniti v kazalec za osnovni razred, definiran kot kazalec za osnovni razred. Specifični koraki: Korak 1: C++ koda za oblikovanje vseh razredov, ki lahko ustrezajo podatkovnim oznakam v XML dokumentu, ki ga je treba analizirati, in razčlenjevanje XML podatkov enega za drugim iz najvišjih oznak. Korak 2: Za vsako razčlenjeno oznako določite, ali obstajajo druge oznake, ki podedujejo oznako kot osnovni razred, torej ali tip oznake izpelje druge vrste oznak; Korak 3: Če ugotovimo, da trenutna oznaka ni podedovana kot osnovni razred, razčlenite trenutno oznako v skladu z običajnimi koraki razčlenjevanja. Korak 4: Če je ugotovljeno, da je trenutna oznaka podedovana kot osnovni razred, dodatno določite, ali je vsebina, opisana z osnovno oznako razreda, podrejena osnovnemu razrednemu objektu ali izpeljanemu razrednemu objektu; Korak 5: Če je vsebina trenutne oznake osnovnega razreda določena za opis objekta osnovnega razreda, razčlenite trenutno oznako po običajnih korakih. 6. korak: Če trenutna vsebina oznake osnovnega razreda opisuje izpeljani objekt razreda, spremenite kodo, da se razčlenjuje po novi metodi razčlenjevanja: spremenite podatkovno strukturo prejšnjega tipa, ki definira osnovni objekt razreda, in namesto tega določite kazalec osnovnega razreda; Spremenimo osnovno razčlenjevalno funkcijo razreda in jo razglasimo za virtualno funkcijo; Korak 7: Kjer je bil osnovni razredni objekt prvotno definiran za razčlenjevanje, se namesto tega določi kazalec osnovnega razreda, določen tip pomnilnika pa se mu dodeli glede na tip, opisan v vsebini oznake, medtem ko se kazalec osnovnega razreda uporabi za klic funkcije razčlenjevanja za razčlenjevanje trenutne oznake. 8. korak: Analizirajte in predvajajte trenutno oznako, da ugotovite, ali je še vedno treba razčleniti oznake; Korak 9: Če ugotovimo, da ni oznak za razčlenjevanje, to pomeni, da je razčlenjevanje zaključeno in da so podatki shranjeni v razred z najvišjo oznako ustreznega XML dokumenta v razredu C++. Korak 10: Če ugotovimo, da še vedno obstajajo oznake, ki niso bile rešene, analizirajte naslednjo oznako glede na korak 2.
Priložen diagram poteka
4. Povzetek
C++ uvaja kazalec osnovnega razreda, ki dodeli objekte ustreznega tipa vsebini XML oznake glede na to, ali gre za osnovni ali izpeljani razred, in uporablja definirani kazalec osnovnega razreda za klic funkcije za razčlenjevanje, ki je deklarirana kot imaginarna funkcija, za analizo vsebine oznake osnovnega razreda XML. Na ta način, ko oznaka osnovnega razreda XML opisuje podatke osnovnega razreda, bo funkcija za razčlenjevanje osnovnega razreda dinamično poklicana glede na polimorfizem C++, podatki osnovnega razreda, opisani z oznako osnovnega razreda, pa se lahko pravilno razčlenijo in ohranijo. Ko oznaka osnovnega razreda XML opisuje podatke izpeljanega razrednega objekta, bo funkcija razčlenjevanja izpeljanega razreda dinamično klicana glede na polimorfizem C++, prav tako pa je mogoče pravilno razčleniti in ohraniti izpeljane podatke razreda, opisane z osnovno oznako razreda.
|