Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1399 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C++] Serialisation d'une liste d'objets dérivés

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] Serialisation d'une liste d'objets dérivés

n°755228
xterminhat​e
Si vis pacem, para bellum.
Posté le 07-06-2004 à 18:51:50  profilanswer
 

Je cherche la manière la plus séduisante pour stocker dans un fichier au format binaire une liste d'objets.
 

Code :
  1. std::list<cbase*> liste_objets;


 
Ces objets ont la particularité d'hériter d'une classe de base (non abstraite).
 

Code :
  1. class cbase
  2. {
  3. virtual void serialisation( ofstream& fichier_destination );
  4. virtual void deserialisation( ifstream& fichier_source );
  5. /*** ...d'autres membres ici! ***/
  6. }


 
Tous mes objets, ainsi que la classe de base disposent d'un couple de fonctions de sérialisation binaire.
 

Code :
  1. class objetN : public cbase
  2. {
  3. void serialisation( ofstream& fichier_destination )
  4. {
  5. cbase::serialisation( fichier_destination );
  6. /*** serialisation des membres spécifiques de objetN ***/
  7. }
  8. void deserialisation( ifstream& fichier_source );
  9. {
  10. cbase::deserialisation( fichier_source );
  11. /*** deserialisation des membres spécifiques de objetN ***/
  12. }
  13. /*** ...d'autres membres ici! ***/
  14. }


 
Quelle methode utiliseriez vous pour serialiser la liste en conservant l'information 'type' des objets pour reconstruire correctement la liste d'objets.
 
--edit : correction virtual;
 
Merci d'avance.  :jap:


Message édité par xterminhate le 07-06-2004 à 20:19:00

---------------
Cordialement, Xterm-in'Hate...
mood
Publicité
Posté le 07-06-2004 à 18:51:50  profilanswer
 

n°755294
docmaboul
Posté le 07-06-2004 à 19:30:09  profilanswer
 

Une sorte de header:
- type de l'objet
- version de l'objet (avec du binaire brut, c'est souvent préférable)
- longueur des données qui vont suivre pour cet objet

n°755316
xterminhat​e
Si vis pacem, para bellum.
Posté le 07-06-2004 à 19:37:31  profilanswer
 

Trame TLV en somme. Je cherchais une solution alternative mais je pense y arriver ainsi.


---------------
Cordialement, Xterm-in'Hate...
n°755359
Taz
bisounours-codeur
Posté le 07-06-2004 à 20:09:10  profilanswer
 

et la virtualité bordel :o

n°755377
Taz
bisounours-codeur
Posté le 07-06-2004 à 20:15:55  profilanswer
 

comment tu veux que ça marche sans ?

n°755378
Taz
bisounours-codeur
Posté le 07-06-2004 à 20:16:10  profilanswer
 

et jeter un oeil à boost les moules :o

n°755380
xterminhat​e
Si vis pacem, para bellum.
Posté le 07-06-2004 à 20:17:57  profilanswer
 

Si tu parles de mon code en exemple, effectivement il y a une erreur. Cela dit, le lecteur aura corrigé de lui même. Concernant mon pb, aurais tu une solution plus séduisante que l'ecriture 'à la main' du type de l'objet dans le fichier ?


---------------
Cordialement, Xterm-in'Hate...
n°755383
Taz
bisounours-codeur
Posté le 07-06-2004 à 20:19:03  profilanswer
 

Taz a écrit :

et jeter un oeil à boost les moules :o

n°755386
Taz
bisounours-codeur
Posté le 07-06-2004 à 20:20:48  profilanswer
 
n°755390
xterminhat​e
Si vis pacem, para bellum.
Posté le 07-06-2004 à 20:23:21  profilanswer
 

Je regarde, merci.


---------------
Cordialement, Xterm-in'Hate...
mood
Publicité
Posté le 07-06-2004 à 20:23:21  profilanswer
 

n°755501
xterminhat​e
Si vis pacem, para bellum.
Posté le 07-06-2004 à 21:55:20  profilanswer
 

Faut accepter de perdre bcp de temps à installer boost pour esperer en gagner plus tard. Quelle daube l'install de boost.


---------------
Cordialement, Xterm-in'Hate...
n°755569
Taz
bisounours-codeur
Posté le 07-06-2004 à 22:52:15  profilanswer
 

bah non : moi j'ai des paquetages, j'ai tout

n°755751
Joel F
Real men use unique_ptr
Posté le 08-06-2004 à 08:43:23  profilanswer
 

Taz a écrit :

bah non : moi j'ai des paquetages, j'ai tout


 
+1 :o

n°756920
xterminhat​e
Si vis pacem, para bellum.
Posté le 08-06-2004 à 17:35:58  profilanswer
 

Il faudrait que je les trouve pour win32. Bizarre, il me sort des erreur sur des types long long dans le code de boost. Je croyais que ca n'existait pas en C++.


---------------
Cordialement, Xterm-in'Hate...
n°756950
Taz
bisounours-codeur
Posté le 08-06-2004 à 18:16:53  profilanswer
 

non ça n'existe pas officiellement : le commité ANSI a statué en 99 et introduit ce type , le C++ en 98, c'est juste une histoire de date : résultat le C99 a des long long définis sur le papier, le C++ les vole donc prudence ... les gars du C ont encore fait cavalier seul, mais la compatabilité sera bientôt officiell

n°756957
xterminhat​e
Si vis pacem, para bellum.
Posté le 08-06-2004 à 18:27:31  profilanswer
 

Probablement que la diffusion à grande echelle de micro 64bits devrait accelerer les choses.


---------------
Cordialement, Xterm-in'Hate...
n°757005
Taz
bisounours-codeur
Posté le 08-06-2004 à 19:38:02  profilanswer
 

non : ça ne change rien : sizeof(long) == 8 sur une machine 6bits

n°757009
cricri_
Posté le 08-06-2004 à 19:43:13  profilanswer
 

une machine 6 bits ???
8 bits tu voulais dire, non ?

n°757010
Taz
bisounours-codeur
Posté le 08-06-2004 à 19:44:53  profilanswer
 

je sais plus, t'es pas capable de faire la déduction ?

n°757012
xterminhat​e
Si vis pacem, para bellum.
Posté le 08-06-2004 à 19:46:30  profilanswer
 

Taz, je parlais du support des long long (64 bits) qui pourront etre calculés par les nouveaux micro en un minimum de cycles...enfin je pense.
 
Bon, Boost commence à me chauffer serieusement. J'ai rebuildé les sources avec la config mingw et il me sort encore des erreurs dans le .hpp avec des long long. Tu n'as pas eu ce problème par hasard ?


Message édité par xterminhate le 08-06-2004 à 19:46:56

---------------
Cordialement, Xterm-in'Hate...
n°757016
Taz
bisounours-codeur
Posté le 08-06-2004 à 19:48:24  profilanswer
 

quand j'ai commencé à vouloir être sérieux, je m'en suis donné les moyens
 
sizeof(long) == 8 ça vous inspire donc rien ?
 
 
bref tout ça ne change rien, ça fait belle lurette qu'on a des types __int64 dans tous les sens

n°757021
xterminhat​e
Si vis pacem, para bellum.
Posté le 08-06-2004 à 19:51:36  profilanswer
 

C'est bon j'ai révisé ma table de multiplication ;) Effectivement ce que tu dis parait logique.
 
Et au sujet de boost, ca te dit rien ce genre de difficulté ?
 


---------------
Cordialement, Xterm-in'Hate...
n°757023
Taz
bisounours-codeur
Posté le 08-06-2004 à 19:54:39  profilanswer
 

non. montre le message d'erreur ... cela dit, c'est pas encore tout à fait officiel, alors ...

n°757025
cricri_
Posté le 08-06-2004 à 19:55:45  profilanswer
 

Taz a écrit :

je sais plus, t'es pas capable de faire la déduction ?


Sissi ... 6x8 = 48  :o

n°757027
Taz
bisounours-codeur
Posté le 08-06-2004 à 19:56:34  profilanswer
 

c'est donc que tu n'as rien compris à sizeof

n°757166
cricri_
Posté le 08-06-2004 à 21:34:04  profilanswer
 

hmm .. sizeof long = 4 = sizeof int
 
sizeof __int64 = 8
 
sizeof char = 1, sizeof short = 2
s'pas bon ???

n°757167
cricri_
Posté le 08-06-2004 à 21:34:51  profilanswer
 

Et j'oubliai sizeof long long = 8 probablement .. ;)

n°757179
Taz
bisounours-codeur
Posté le 08-06-2004 à 21:40:11  profilanswer
 

non, t'as tout faux, sauf le sizeof(char) == 1 (mais saura tu pourquoi)
 
le reste est complètement dépendant de ton environnement, les types standards doivent juste obéirà quelques contraintes simple (comme un taille suffisante pour reprénsenter un interval de -n à +n)

n°757190
cricri_
Posté le 08-06-2004 à 21:45:30  profilanswer
 

Non, je n'ai pas tout faux ...
Ou alors il faut me le prouver, ou bien ...  
Vi ... efectivement si tu programmes sur un ZX80 y a de forte chance que cela ne soit pas pareil ...
Désolé, je n'avais pas pensé à ça ...

n°757195
Taz
bisounours-codeur
Posté le 08-06-2004 à 21:47:03  profilanswer
 

je crois que tu as une vision un peu trop réduite du monde non X86-32

n°757206
cricri_
Posté le 08-06-2004 à 21:53:25  profilanswer
 

Possible, je n'ai programmé que sous x86 16 puis 32 bits, et bien avant sous motorola du 6809 au 68060 ( enfi récemment) ...  
- Le 6809 j'avoue ne pas me rappeler de tous les types ..
- Depuis ... je ne vois pas trop ...

n°757208
Taz
bisounours-codeur
Posté le 08-06-2004 à 22:00:14  profilanswer
 

pense au monde 64 bits : PPC, X86-64, etc :o

n°757228
xterminhat​e
Si vis pacem, para bellum.
Posté le 08-06-2004 à 22:15:26  profilanswer
 

Quelle prise de tete ce boost. La lib serialization est livrée a part et necessite encore d'autres outils spécifiques.... franchement, faudrait qu'ils simplifient leur lib. C'est dommage!


---------------
Cordialement, Xterm-in'Hate...
n°757231
Taz
bisounours-codeur
Posté le 08-06-2004 à 22:21:26  profilanswer
 

franchement faudrait que t'apprennes à lire ; boost::serialization est en beta test.
 
après j'y peux quoi si tu travailles dans un environnement qui n'en a que le nom ...

n°757234
xterminhat​e
Si vis pacem, para bellum.
Posté le 08-06-2004 à 22:25:11  profilanswer
 

j'aurais peut etre moins de difficulté sur ma machine linux mais c'est un programme pour win32... j'y peux pas grand chose.


---------------
Cordialement, Xterm-in'Hate...
n°757237
Taz
bisounours-codeur
Posté le 08-06-2004 à 22:26:52  profilanswer
 

nous non plus, boost non plus

n°757241
xterminhat​e
Si vis pacem, para bellum.
Posté le 08-06-2004 à 22:29:08  profilanswer
 

Ouais j'arrete de me plaindre! ;)
 
Au final, solution TLV. Rien de tres excitant mais ca marchera correctement.


Message édité par xterminhate le 08-06-2004 à 22:29:21

---------------
Cordialement, Xterm-in'Hate...
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C++] Serialisation d'une liste d'objets dérivés

 

Sujets relatifs
rollover et liste déroulante -> c'est moche[JavaScript] - Modifier une liste déroulante sur une fenetre mere
Liste deroulante avec saisie semi-auto ???[ADA] Erreur d'execution | liste chainée => soucis de pointeur ?
refresh et formulaire (liste deroulante)J'aimerai faire une liste de contact puis un un forum en PHP mais
liste dans un bddMise à jour de champs à partir de liste déroulante...?
JList et affichage du nom des objets autre que nomDeMaClasse@3fd4gf5comment créer une liste déroulante éditable???
Plus de sujets relatifs à : [C++] Serialisation d'une liste d'objets dérivés


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR