Excuse moi, je me suis mal exprimé.
Je vais essayer de le dire autrement : voici le genre de problème qui m'était posé, et que j'avais à résoudre (j'en ai ajouté un peu, il s'agissait d'un truc beaucoup plus simple).
modèle:
1 2 3 4 5 6
| template <class X> class A {
... // 500 lignes Base
public:
X unefonction(X &x);
X *une_variable;
}; |
spécialisation:
1 2 3 4 5 6 7
| class Y;
template<> class A<Y> {
... // 500 lignes Base recopiées
private:
Y *unefonction(Y x);
Y une_variable;
}; |
Ma question était : Y aurait-il un moyen
simple de ne pas avoir à réécrire les 500 lignes Base. Pour moi c'est cela que signifie spécialisation. Pas on jette tout et on recommence.
La raison en est simplement la maintenance (si des choses changent dans les 500 lignes Base, je suis obligé de les reporter).
Dans mon cas, il s'agissait simplement d'ajouter une fonction dans la spécialisation. Je l'ai résolu en l'ajoutant au modèle, comme ça c'est dispo pour toutes les classe, mais ça introduit un comportement non défini si elle est utilisée autrement que pour le paramètre du modèle prévu. Et c'est pour cela que j'ai parlé d'héritage de modèle.
Petite précision : l'exemple ci-dessus ne représente qu'un exemple théorique, et les modifications introduites sont purement imaginaires, et il est possible qu'individuellement une solution existe. C'est uniquement le principe que je voulais montrer.
A bientôt!
Partager