Voici le genre de chose que je faisais et fais encore
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));
A 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++.

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:
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;
 }
}
};
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.

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.