Serializace v C++   otázka

C#

Dobrý den,

mohla by mi nejaka ochotna a hlavne znala duse napovedet, jak se provadi serializace v C++? Jinymi slovy jak ulozit objekt tridy do souboru (.dat/txt) a nasledne ho nacist? Bohuzel jsem nikde nenalezl srozumitelnou dokumentaci v aj, natoz v cestine.

Vrele dekuji pripadne pomoci s mym problemem :)

S pozdravem ctenar dotNet portalu :)

PS: Omlouvam se za ten tag, ale nejdou zadavat...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pokud používáte C++ a nativní kód tak asi žádná obecná podpora není.

Pokud používáte C++/CLI tj. managed kód, tak by mělo jít využít standardní prostředky .NETu jako BinaryFormatter apod.

http://msdn.microsoft.com/en-us/Library/...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Používám C++ v nativním kódu, dál jsem se zatím ještě nedostal... to se mi nechce verit, že v normalním C++ nemohu ukladat objekty do souboru... v tom případě nevím, jak si poradím se semestrálkou :/

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Podpora serializace jako takové není a ani být nemůže, protože C++ si nikam neukládá informace o položkéch těch tříd. Takže je třeba vše psát ručně, možná na to existuje nějaký generátor kódu.

V případě, že se jedná jen o jednoduché objekty, které nemají žádné reference/pointry na jiné objekty, tak lze pomocí fwrite/fread prostě nacpat kus paměti na disk a pak ho zase přečíst. Ale nesmí tam nikde být žádný pointer, jinak to pochopitelně nebude fungovat.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

To pan Čermák:

reference ani ukazatele právě nepotřebuji použít. Mohl byste mi zde napsat obecnou ukazku kodu, jak byste problem resil způsobem, který jste právě popsal a nastinil tak reseni, prosím?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

myslite tímto zpusobem?

Kniha kniha;
		kniha.inicializace();
		// uložení knihy do souboru
		ofstream ofs("seznamKnih.dat", ios::binary);
		ofs.write((char *)&kniha, sizeof(kniha));
		ofs.close();
		
		// čtení knihy ze souboru
		Kniha knihaCopy;
		ifstream ifs("seznamKnih.dat", ios::binary);
		ifs.read((char *)&knihaCopy, sizeof(knihaCopy));
		ifs.close();
nahlásit spamnahlásit spam 0 odpovědětodpovědět

myslite tímto zpusobem?

Kniha kniha;
		kniha.inicializace();
		// uložení knihy do souboru
		ofstream ofs("seznamKnih.dat", ios::binary);
		ofs.write((char *)&kniha, sizeof(kniha));
		ofs.close();
		
		// čtení knihy ze souboru
		Kniha knihaCopy;
		ifstream ifs("seznamKnih.dat", ios::binary);
		ifs.read((char *)&knihaCopy, sizeof(knihaCopy));
		ifs.close();
nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback