Bonjour,

Je dois faire un "désérialisateur" (?) de fichiers CSV.
Ces fichiers contiennent des entrées correspondant à des champs de structures C++.

Il y a plusieurs types de fichiers, correspondant à plusieurs types de structures. Il y a une relation d'apparentement entre ces structures, c'est-à-dire qu'il y a des champs communs.

Prenons les classes suivantes :

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
struct A
{
    int a;
};
 
struct B : A
{
    int b;
};
 
struct C : A
{
    int c1;
    int c12;
};
Il me faut désérialiser B et C. Leurs fichiers CSV respectifs seraient, pour une seule entrée :

et
Code : Sélectionner tout - Visualiser dans une fenêtre à part
a_Value;c1_Value;c2_Value
J'avais donc pensé, pour faire ça, à faire une hiérarchie de classe parallèle qui se chargerait de faire correspondre à chaque structure une classe à même d'interpréter le CSV :

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
struct IReader
{
    void read() = 0;
    void readLine() = 0;
};
 
// Lit les membres spécifiques à la classe A
struct AReader : IReader
{
    void read();
    void readLine();
};
 
// Lit les membres spécifiques à la classe A
struct BReader : IReader
{
    void read();
    void readLine();
};
 
// Lit les membres spécifiques à la classe A
struct CReader : IReader
{
    void read();
    void readLine();
};
Les fonctions de BReader et CReader feraient appel aux fonctions éponymes de A. À priori, le polymorphisme statique ferait l'affaire, BReader et CReader seraient remplacés par Reader<T>.

Je ne sais pas si c'est la meilleure méthode. Je suppose qu'il existe un pattern pour ce problème qui doit être assez classique.

J'attend vos critiques et propositions.

Merci !