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 :
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
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 :
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 !
Partager