Polymorphisme paramétrique ?
Il n'y a pas grand intérêt à mélanger des choses différentes comme des points 1D et 3D qui ne seront jamais traités de façon polymorphique ..dynamique.
Après, on s'en sortira avec:
	
	| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 
 | template <size_t N> Point {
    double coord[N];
};
 
template <size_t N> delta {
    double coords[N];
    // oui, c'est la même définition, mais sémantiquement, ce n'est pas 
    // la même chose => pas d'héritage public!!
};
 
template <size_t N>
Point<N> operator+(Point<N> const& lhs, Delta<N> const& rhs)
{ return Point<N>(lhs) += rhs; };
// faire la réciproque
 
template <size_t N>
Delta<N> operator-(Point<N> const& lhs, Point<N> const& rhs)
{ ... } | 
 Il peut être intéressant de vraiment isoler les substituabilités pour réduire la quantité de code à pondre tout en permettant un typage fort. Typage fort très utile -- on avait eu des Bugs A La C*n avec une bibliothèque de gestion de dates qui mélangeait allègremlent deltas, GMT, UTC, ... dans une même classe.
Partager