Pour ton histoire d'exception, je te propose ceci.
Dans Cube et Slice tu définis un type exception_type, comme ça dans ReadDataFile, tu peux balancer un :
throw typename T::exception_type(arguments);
Pour les traits, un article va être publié sur developpez demain sur le sujet!
Sinon, si les deux ne doivent être stockés ensemble, je penche pour les templates. Pour alléger la notation ReadDataFile<Cube> et <Slice>, tu n'as qu'à faire des typedefs :
1 2
| typedef ReadDataFile<Cube> rdfCube;
typedef ReadDataFile<Slice> rdfSlice; |
Par exemple...
De plus tes références permettent de manipuler des Cube et Slice à travers ta classe ReadDataFile, je trouve cette solution efficace, comparée à celle de l'héritage, utilise uniquement quand on veut faire un traitement global en série, généralement. Donc stocker tous les objets de tous les types ensemble à travers une base commune.
PS :
Une classe de trait (trait class), généralement template, définit des caractéristiques ou des fonctions associées à un type donné. Cela permet donc d'ajouter de l'information à des types que l'on ne peut pas modifier.
Source : http://c.developpez.com/faq/cpp/?pag...S_classe_trait
Partager