» »

c++: shranjevanja strukture(razreda) na disk v enem kosu

c++: shranjevanja strukture(razreda) na disk v enem kosu

jlpktnst ::

Torej, če shranim nek razred/strukturo direktno na disk z write funkcijo (podaš ji objekt, sizeof objekt, količino objektov in ptr na file). Bo zadeva delovala ko berem to z diska? Najbolj me motijo funkcije. Kaj se zgodi z njimi (ptr)? Mi nebo prepisalo naslovov funkcij z starimI? Jih sploh ne shrani?

Hvala in LP.

napsy ::

shranjene podatke ne bo problemov brat. za funkcije se mi pa zdi, da se shrani njihova pomnilniška lokacija(ki pa je pri branju v na novo zagnanem programu nekoristna).
"If you die, you die. But when you live you live. There is no time to waste."

OwcA ::

Vsakega objekt ni serializabilen. Če uporabljaš kazalce ali polimorfizem bo težka. Ena možnost je, da imaš metodo s katero skuša objekt sam sebe popraviti po zimskem spanju. Metode same niso problem, saj jih prerpocesor spremeni v navadne funkcije in jim podtakne kazalec na klicoči objekt (zato je sizeof() za objekte brez navideznih funkcij kar enak vsoti velikosti atributov).
Otroška radovednost - gonilo napredka.

Vesoljc ::

zakaj bi sploh rad shranil "funkcionalnost" nekega objekta?
zadevo loči na funkcionalni del in na podatkovni del, katerga preprosto (binarno) zapišeš.

če pa že hočeš imet "cel" objekt, potem pa uporabi magari dll (ali .so)...
Abnormal behavior of abnormal brain makes me normal...

hatch ::

Definitivno ti bo v file zapisalo memory addresso kamor pointer kaze..

recimo imas..

typedef struct player_s {
   char name[32];   /* cimvec podatkov naj bo staticnih */
   weapon_t *weapon;
} player_t;


zdej ti bo na weapon zapisalo pointer.. ok.. zato mors podatek kamor kaze pointer posebi zapisat.. priporocam poseben database file.. namesto *weapon pa zapises 'fseek' lokacijo do podatka v bazi.

Zgodovina sprememb…

  • spremenil: darh ()

jlpktnst ::

Zadeva je le v tem da ima razred poleg podatkov se nekaj funkcij. Vsi podatki so statični. Nočem pa da mi ko preber razred nazaj pointerje na funkcije prepiše s starimi.
primer:

struct primer {
int val;
primer( ); {val=3;};
primer( int a ); {val=a;};
void set(int a); {val=a;};
};
to je sicer precej okrnjen primer, vendar lepo ilustrira. Zadeva je da se mi zdi noro strukturo z 2ma spremenljivkama ločevat na statični del in funkcije.

Sicer bom pa preizkusil in videl kaj bo:)
edit: sicer pa tako owca pravi da bi moralo delati!

Hvala za informacije,
LP

Zgodovina sprememb…

  • spremenil: jlpktnst ()

rasta ::

Za vsak tip razreda, se v pomnilniku ustvari tabela, kjer so kazalci na metode tega razreda pa na dedovani razred ipd.

Vsaka istanca razreda pa ima lokalno kopijo podatkov med katerimi je še eden na prej omenjeno tabelo (sem pozabil kako se ji že strokovno reče).

Sicer pa kolikor jaz vem, se dobijo funkcije za serializacijo razreda ...


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

"Dinamicna" sprememba razreda v C++

Oddelek: Programiranje
131935 (1327) Spura
»

C in funkcije ter #define

Oddelek: Programiranje
463969 (2330) misek
»

[C] struct in int[] (strani: 1 2 )

Oddelek: Programiranje
657387 (6460) MrBrdo
»

[c++] standardni c++ in dogodki(events)

Oddelek: Programiranje
121759 (1584) yeti
»

Pomoč pri c++ razlaga

Oddelek: Programiranje
192328 (2070) Person

Več podobnih tem