Le problème est simple mais je ne sais quelle conception choisir.
J'ai 2 structures de données : Cube et Slice. Ces 2 structures implémentent une méthode read().
J'ai créé une classe ReadDataFile qui est chargée de lire un fichier et de remplir les structures de type Cube ou Slice.
J'ai 2 possibilités pour ReadDataFile :
1/ Soit 1 template du type :
Ce qui donne à l'utilisation :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 template<typename T> class ReadDataFile { public: ReadDataFile(T data, const string& filename) : data_(data) { data_.read(filename); } private: T& data_; };
etc ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Cube data; ReadData<Cube> readData(data, "fichier.txt");
Mais je peux aussi choisir d'utiliser l'héritage comme par exemple :
Cube et Slice qui héritent d'une classe de base Data possédant une fonction virtuelle pure read() qui est implémentée dans Cube et Slice.
A ce moment là, ReadDataFile n'aurait plus besoin d'être template, et pourrait être écrite comme suit :
Je pense que la 2eme conception est meilleure, mais bon, je ne saurais pas trop le justifier. Qui peux me dire quelle est la meilleure des 2 conceptions dans ce cas précis ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 class ReadDataFile { public: ReadDataFile(Data& data, const string& filename) : data_(data) { data_.read(filename); } private: Data& data_; };
Partager