Voici le genre de chose que je faisais et fais encoreA la longue c'est fastidieux et on se retrouve avec des dizaines si pas des centaines de structures en tout genre avec à chaque fois des kilomètres de code pas très fiable associés à chaque structure. Bref, c'est du C, pas vraiment du C++.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 #pragma pack(1) struct record { char name[20]; unsigned id,seq; }; record r; strcpy(r.name,s.c_str());// bof bof... r.id=25; r.seq=10; ... file.write(&r,sizeof(record));
J'ai vu un peu comment était construit boost::serialize avec la méthode intrusive serialize(). Le principe est très sympa.
J'aimerais m'en inspirer pour généraliser quelque chose de ce genre:En gros, j'ai des records à stocker avec une ou plusieurs clé de tri (et donc de recherche). Dans l'exemple j'ai "name" et "id" qui sont des infos utiles à stocker, et les deux participent chacune dans une clé de tri. Au delà, il y a aussi "seq" mais qui n'est utile que pour imposer une sequencement ordonné dans une des clés, après je n'en ai plus besoin.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 struct record { std::string name; unsigned id,seq; void serialize_record(archive_record & a) { a & name & id; } void serialize_keysort(archive_keysort & a,int keynumber) { switch (keynumber) { case 0: a & id; break; case 1: a & name & seq; break; } } void serialize_keysearch(archive_keysearch & a,int keynumber) { switch (keynumber) { case 0: a & id; break; case 1: a & name; break; } } };
Un petite aide pour poursuivre ma réflexion serait bienvenue. Et surtout s'il existe déjà du tout fait, c'est encore mieux
Merci.
Partager