Salut,
Autant le dire tout de suite, je n'ai lu que les quelques premières interventions... Ce qui suit aura donc peut être déjà été dit
De manière générale, reinterpret_cast ne devrait servir qu'à une chose : convertir une donnée quelconque en un char * et inversement, sans doute à fins d'une sérialisation en binaire.
Toute tentative d'utilisation de reinterpret_cast autre que celle là présente exactement les même risques que ceux liés au transtypage "à la barbare" tel qu'utilisé en C et mènera systématiquement à des catastrophes.
Quant aux incohérences d'interface, le problème devrait se régler non pas en essayant de convertir les données d'un type en l'autre (des float en double ou l'inverse), mais bien en mettant au point une abstraction commune, qui sait, qui pourrait être proche deBien sur, il est possible de remplacer le visiteur par n'importe quel autre possibilité ayant recours au double dispatch, ce n'est qu'un exemple "vite fait"... Mais, le principe de base est que l'utilisateur des caractéristiques n'a absolument aucun besoin de savoir la manière dont les données sont représentées en interne par les différentes marques .
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 class Caracteristique{ public: Caracteristique(Caracteristique const & ) = delete; Caracteristique & operator = (Caracteristique const &) = delete; virtual bool accept(VisiteurCaracteristique /* const */ & ) const; }; class CaracteristiqueRenault : public Caracteristique{ bool accept(VisiteurCaracteristique /* const */ & v) const{ return v.visit(*this); } private: /* donnees spécifiques à Renault */ }; class CaracteristiqueAudi : public Caracteristique{ bool accept(VisiteurCaracteristique /* const */ & v) const{ return v.visit(*this); } private: /* donnees spécifiques à Audi */ }; class Vehicule{ public : /* ... */ private : std::unique_ptr<Caracteristique> caracteristiques_; };
Tout ce qu'il a besoin de savoir, c'est les services que l'on est en droit de s'attendre de la part de l'abstraction de base
Partager