Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 13040|Válasz: 2

[C++] Technikák C++ számára a származtatott osztályobjektum adatait kidobására XML fájl adatok elemzésekor...

[Linket másol]
Közzétéve 2019. 01. 16. 9:22:59 | | | |
Ezt a bejegyzést utoljára Summer szerkesztette 2019-1-16-i 09:31-én

1. Mi a technikai probléma, amit ebben a cikkben meg kell oldani?

Oldjuk meg azt a problémát, hogy amikor XML dokumentumokat C++ nyelven parálnak, az alap osztálycímkék az eredeti XML dokumentumban megjelenő osztályadatokat csak az alap osztály adatait a hagyományos elemző módszer szerint tudják parzálni, de nem tudják teljesen a származtatott osztályadatokat a leszármaztatott osztályadatokat.


2. Műszaki háttér

Korábbi fejlesztésben használd boost::serializációt a származtatott osztályok átvitelére egy alap osztálymutatóval, vagy BOOST_CLASS_EXPORT makrót.

Mindkét fenti séma a meglévő technológiákban az absztrakt osztálymechanizmuson alapul, de mivel az absztrakt osztályokat nem lehet konkrét objektumként megjeleníteni, az XML dokumentumokban alaposztályként beállított objektumok nem értelmezhetők. A jelenlegi találmány célja, hogy mind az alaposztályobjektum, mind az alaposztály által jelölt származtatott osztályobjektum adatai helyesen lehessenek elemezni és teljesen megőrződjenek.


3. A cikkben bemutatott műszaki séma

Ez a cikk nem használja az absztrakt osztálymechanizmust, hanem bevezeti az alaposztály által hívott osztályt az alap osztály által hívott osztályba, az alap osztály elemzőfüggvényt virtuális függvényként nyilvánítja, és az elemző függvényt az alap osztály mutatóján keresztül hívja az elemzési folyamatban, hogy polimorfizmust alkalmazzon az adatok dinamikus elemzésére és tárolására, végül pedig biztosítja, hogy mind az alaposztály objektum, mind az alaposztályból származtatott osztályobjektum adatai tárolhatók az alaposztály definiált mutatójában.
Konkrét lépések:
1. lépés: C++ kód minden olyan osztály megtervezésére, amely megfelel az elemzendő XML dokumentumban szereplő adatcímkéknek, és az XML adatokat egyenként elemző a felső szintű címkékből.
2. lépés: Minden elemzett címkénél határozzuk meg, hogy vannak-e más címkék, amelyek alaposztályként öröklik-e a címkét, vagyis a címkétípus más címkétípusokat is eredményez;
3. lépés: Ha megállapítjuk, hogy a jelenlegi címke nem öröklődik alaposztályként, a jelenlegi címkét a normál elemző lépések szerint elemzzük.
4. lépés: Ha megállapítjuk, hogy a jelenlegi címke alaposztályként öröklik, tovább kell határozni, hogy az alap osztály címkéje által leírt tartalom alárendelt-e az alap osztályobjektumnak vagy egy származtatott osztályobjektumnak;
5. lépés: Ha a jelenlegi alaposztály tagjának tartalmát úgy határozzuk meg, hogy leírja az alap osztályobjektumot, a jelenlegi címkét a normál lépések szerint elemzzük.
6. lépés: Ha a jelenlegi alap osztály címke tartalmazza a vezetett osztályobjektumot, módosítsuk a kódot az új parsing módszer szerint parse-re: módosítsuk az alaposztály objektumot definiáló előző típus adatszerkezetét, és határozzuk meg az alap osztály mutatót; Módosítsuk az alaposztály elemzési függvényt, és nyilvánítsuk virtuális függvényként;
7. lépés: Ahol az alaposztály objektumot eredetileg az elemzés érdekében definiálták, akkor az alap osztály mutatóját definiálják, és a memória típusát a címkék tartalmában leírt típus szerint rendelik hozzá, az alap osztály mutatója pedig a parsing függvény meghívására a jelenlegi címkét elemzésére.
8. lépés: A jelenlegi címkét elemzed és játssza le, hogy megállapítsd, vannak-e még parzálandó címkék;
9. lépés: Ha megállapítjuk, hogy nincs parsírandó címké, az azt jelenti, hogy az elemzés befejeződött, és az adatokat elmentették a C++ osztály legmagasabb címke-jével rendelkező osztályba.
10. lépés: Ha megállapítjuk, hogy még mindig vannak megoldatlan címkék, a következő címkét a 2. lépés szerint értelmezzük.

Áramlásdiagram csatolva

4. Összefoglaló

A C++ egy alaposztály mutatót vezet be, amely a megfelelő típusú objektumokat rendeli az XML címke tartalmához annak megfelelően, hogy az alap vagy származtatott osztály-e, és a definiált alaposztály mutatót használja arra, hogy képzeletbeli függvényként beállított parzálási függvényt hívjon az XML alaposztály címkéi tartalmának elemzésére. Így, amikor az XML alaposztály címkéje leírja az alaposztály objektum adatait, az alaposztály elemzőfüggvényét dinamikusan meghívjuk C++ polimorfizmusa szerint, és az alaposztály címkéje által leírt alap osztályadatok helyesen elemezhetők és megőrizhetők. Amikor az XML alap osztály címke leírja a vezetett osztályobjektum adatait, a származtatott osztályelemző függvényt dinamikusan meghívják C++ polimorfizmusa szerint, és az alap osztály címkéje által leírt származtatott osztályadatok is helyesen parzálhatók és megőrizhetők.





Előző:QQ protokoll elemzési oktató Android/PC-re
Következő:A Demon Spirit Summon V4.1.8 visszafogott módon van használatban
Közzétéve 2019. 01. 16. 9:26:40 |
A folyamatábra eltűnt
 Háziúr| Közzétéve 2019. 01. 16. 9:31:49 |
Megjelent: 2019-01-16, 09:26
A folyamatábra eltűnt

A folyamatábra hozzáadja, tudod
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com