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:
1 2 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