Bonjour,
Le projet que je dois réaliser un est projet réseaux, en particulier l'implémentation d'un protocole. Ce protocole spécifie plusieurs formats de paquets appelés "TLV".
Mon problème est de trouver une façon d'implémenter ces TLV de façon idiomatique en C++.
Tous les TLV ont un champ "type".
Puis tous les TLV sauf un ont un champ "length".
Ensuite ça diverge. Cependant on peut noter qu'il existe deux TLV avec les mêmes champs mais dont seulement le type est différent.
Ma première idée était d'utiliser l'héritage en utilisant un enum pour différencier les TLV.
En particulier j'aurais eu en classe mère un TLV du type :
Puis j'aurais fait une classe fille avec un champ length. Puis pour chaque TLV différent une classe "petite fille". Cependant mon problème est que parfois je vais avoir deux TLV qui diffèrent par leur Type mais qui pourtant auront la même classe. Je trouve ça bizarre d'un point de vue utilisateur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 class Tlv{ enum TlvType { ... //Differents types de TLV }; protected: TlvType type_; public: TlvType type(); Tlv(); };
Je me trompe peut-être, mais si l'utilisateur veut créer le TLV machin, j'aurais pensé qu'il fasse appelle au constructeur de la classe TLV machin, pas au constructeur de la classe TLV bidule en lui passant machin en paramètre.
Puis le enum dans la classe mère je ne suis pas convaincu que ce soit la bonne façon de faire car ça n'est pas très extensible. Si je souhaite rajouter des TLV je devrais modifier le enum et toutes les classes faisant un "pattern matching" (ou un case) sur le type.
Bref je suis un peu dubitatif sur les choix que j'ai fait jusqu'à présent et je me demande s'il n'éxiste pas une meilleure solution.
En espérant avoir été clair,
Bonne journée
Partager