Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 13040|Odpověď: 2

[C++] Techniky pro C++ pro vypisování odvozených dat objektů třídy při parsování XML souborů...

[Kopírovat odkaz]
Zveřejněno 16.01.2019 9:22:59 | | | |
Tento příspěvek naposledy upravila Summer dne 16. 1. 2019 v 09:31

1. Jaký je technický problém, který je třeba v tomto článku vyřešit?

Vyřešit problém v předchozím stavu techniky, kdy při parsování XML dokumentů v jazyce C++ mohou základní třídní tagy odvozené z původního XML dokumentu parsovat pouze základní třídní data podle typu základní třídy podle konvenční metody parsování, ale nemohou zcela parsovat odvozená třídní data.


2. Technické pozadí

V předchozích stavech techniky použijte boost::serialization k přenosu odvozených tříd s ukazatelem základní třídy nebo použijte BOOST_CLASS_EXPORT makro.

Obě výše uvedená schémata v existujících technologiích jsou založena na mechanismu abstraktních tříd, ale protože abstraktní třídy nelze instancionovat jako konkrétní objekty, které lze použít, objekty deklarované jako základní třídy v XML dokumentech nemohou být parsovány. Tento vynález má zajistit, aby data jak základního třídního objektu, tak odvozeného třídního objektu označeného základním třídním objektem mohla být správně parsována a zcela zachována.


3. Technické schéma uvedené v tomto článku

Tento článek nepoužívá mechanismus abstraktní třídy, ale zavádí ukazatel základní třídy do třídy volané základní třídou, deklaruje funkci analýzy základní třídy jako virtuální funkci a volá tuto funkci prostřednictvím ukazatele základní třídy v procesu parsování, aby bylo možné aplikovat polymorfismus pro dynamické zpracování a ukládání dat, a nakonec zajišťuje, že data jak objektu základní třídy, tak odvozeného objektu třídy odvozeného ze základní třídy mohou být uložena v ukazateli definovaném základní třídou.
Konkrétní kroky:
Krok 1: C++ kód pro návrh všech tříd, které mohou odpovídat datovým tagům v XML dokumentu, který má být parsován, a parsování XML dat jednu po druhé z vrchních tagů.
Krok 2: Pro každý parsovaný tag určete, zda existují jiné tagy, které tag dědí jako základní třídu, tedy zda typ tagu odvozuje jiné typy tagů;
Krok 3: Pokud se zjistí, že aktuální tag není zděděn jako základní třída, parsujte aktuální tag podle běžných kroků parsování.
Krok 4: Pokud se zjistí, že aktuální tag je zděděn jako základní třída, dále určit, zda je obsah popsaný tagem základní třídy podřízen objektu základní třídy nebo odvozenému objektu třídy;
Krok 5: Pokud je obsah aktuálního tagu základní třídy určen jako popis objektu základní třídy, parsujte aktuální tag podle běžných kroků.
Krok 6: Pokud aktuální obsah tagu základní třídy popisuje odvozený objekt třídy, upravte kód tak, aby se parsoval podle nové metody parsování: upravte datovou strukturu předchozího typu, který definuje základní třídní objekt, a místo toho definujte ukazatel základní třídy; Upravte základní třídu parsovací funkce a deklarujte ji jako virtuální funkci;
Krok 7: Pokud byl objekt základní třídy původně definován pro parsování, je místo toho definován ukazatel základní třídy, který mu je přidělen podle typu popsaného obsahem štítku, a ukazatel základní třídy se použije k volání parsovací funkce pro analýzu aktuálního štítku.
Krok 8: Analyzujte a přehrajte aktuální tag, abyste zjistili, zda jsou tagy ještě k parsování;
Krok 9: Pokud se zjistí, že nejsou žádné značky k parsování, znamená to, že parsování bylo dokončeno a data byla uložena do třídy s nejvyšším štítkem odpovídajícího XML dokumentu v třídě C++.
Krok 10: Pokud se zjistí, že stále existují značky, které nebyly vyřešeny, parsujte další tag podle kroku 2.

Připojený diagram

4. Shrnutí

C++ zavádí ukazatel základní třídy, který přiřazuje objekty odpovídajícího typu obsahu XML tagu podle toho, zda se jedná o základní třídu nebo odvozenou třídu, a používá definovaný ukazatel základní třídy k volání parsovací funkce deklarované jako imaginární funkce pro parsování obsahu XML základní třídy tagu. Tímto způsobem, když XML základní třídní tag popisuje data základního třídního objektu, bude funkce pro parsování základní třídy dynamicky volána podle polymorfismu C++ a základní třídní data popsaná základní třídou tagem lze správně parsovat a zachovat. Když XML základní třídní tag popisuje odvozená data třídního objektu, odvozená třídní parsovací funkce bude dynamicky volána podle polymorfismu C++ a odvozená třídní data popsaná základním třídním tagem lze také správně parsovat a zachovat.





Předchozí:Návod na analýzu QQ protokolu pro Android/PC
Další:Démonický duch Summon V4.1.8 je použit v nenápadném stylu
Zveřejněno 16.01.2019 9:26:40 |
Diagram je pryč
 Pronajímatel| Zveřejněno 16.01.2019 9:31:49 |

Diagram přidává, víte
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com