Serialisation d'une liste d'objets dérivés [C++] - C++ - Programmation
Marsh Posté le 07-06-2004 à 19:30:09
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
Marsh Posté le 07-06-2004 à 19:37:31
Trame TLV en somme. Je cherchais une solution alternative mais je pense y arriver ainsi.
Marsh Posté le 07-06-2004 à 20:17:57
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 ?
Marsh Posté le 07-06-2004 à 20:23:21
Je regarde, merci.
Marsh Posté le 07-06-2004 à 21:55:20
Faut accepter de perdre bcp de temps à installer boost pour esperer en gagner plus tard. Quelle daube l'install de boost.
Marsh Posté le 08-06-2004 à 08:43:23
ReplyMarsh Posté le 08-06-2004 à 17:35:58
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++.
Marsh Posté le 08-06-2004 à 18:16:53
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
Marsh Posté le 08-06-2004 à 18:27:31
Probablement que la diffusion à grande echelle de micro 64bits devrait accelerer les choses.
Marsh Posté le 08-06-2004 à 19:38:02
non : ça ne change rien : sizeof(long) == 8 sur une machine 6bits
Marsh Posté le 08-06-2004 à 19:46:30
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 ?
Marsh Posté le 08-06-2004 à 19:48:24
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
Marsh Posté le 08-06-2004 à 19:51:36
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é ?
Marsh Posté le 08-06-2004 à 19:54:39
non. montre le message d'erreur ... cela dit, c'est pas encore tout à fait officiel, alors ...
Marsh Posté le 08-06-2004 à 19:55:45
ReplyMarsh Posté le 08-06-2004 à 21:34:04
hmm .. sizeof long = 4 = sizeof int
sizeof __int64 = 8
sizeof char = 1, sizeof short = 2
s'pas bon ???
Marsh Posté le 08-06-2004 à 21:40:11
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)
Marsh Posté le 08-06-2004 à 21:45:30
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 ...
Marsh Posté le 08-06-2004 à 21:47:03
je crois que tu as une vision un peu trop réduite du monde non X86-32
Marsh Posté le 08-06-2004 à 21:53:25
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 ...
Marsh Posté le 08-06-2004 à 22:15:26
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!
Marsh Posté le 08-06-2004 à 22:21:26
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 ...
Marsh Posté le 08-06-2004 à 22:25:11
j'aurais peut etre moins de difficulté sur ma machine linux mais c'est un programme pour win32... j'y peux pas grand chose.
Marsh Posté le 08-06-2004 à 22:29:08
Ouais j'arrete de me plaindre!
Au final, solution TLV. Rien de tres excitant mais ca marchera correctement.
Marsh Posté le 07-06-2004 à 18:51:50
Je cherche la manière la plus séduisante pour stocker dans un fichier au format binaire une liste d'objets.
Ces objets ont la particularité d'hériter d'une classe de base (non abstraite).
Tous mes objets, ainsi que la classe de base disposent d'un couple de fonctions de sérialisation binaire.
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.
Message édité par xterminhate le 07-06-2004 à 20:19:00
---------------
Cordialement, Xterm-in'Hate...