OVH Cloud OVH Cloud

Template et héritage

2 réponses
Avatar
Hugues CASSE
J'aimerai avoir votre avis sur la construction suivante.
Y a-t-il des compilateurs qui l'acceptent?

On a une classe template:
template <class T> C {
void f(void) { traitement 1 };
...
};

Une autre classe A :
class A { ... };
Qui nous permet de spécialiser la fonction F de la classe C:
template <> void C<A *>::f(void) { traitement 2 };

Enfin une classe B héritant de A:
class B: public A { ... };

Mon problème est le suivant, je voudrai que la ligne suivante
effectue le "traitement 2":
C<B> o;
o.f();

Merci d'avance, HugBert.

2 réponses

Avatar
Marc Boyer
In article <chp05e$rmh$, Hugues CASSE wrote:
J'aimerai avoir votre avis sur la construction suivante.
[SNIP Héritage et Template]


Globalement, tu essayes de faire par spécialisation
des templates ce qui se serait fait simplement avec
un dynamic_cast, non ?

En attendant que quelqu'un de plus compétent que moi
prenne le temps de te répondre, je t'invite à consulter
"Modern C++ Design", qui parle de ce genre de choses.

Marc Boyer
--
La contractualisation de la recherche, c'est me donner de l'argent pour
faire ce que je ne sais pas faire, que je fais donc mal, pendant que ce
que je sais faire, je le fais sans moyens...

Avatar
Arnaud Debaene
Hugues CASSE wrote:
J'aimerai avoir votre avis sur la construction suivante.
Y a-t-il des compilateurs qui l'acceptent?

On a une classe template:
template <class T> C {
void f(void) { traitement 1 };
...
};

Une autre classe A :
class A { ... };
Qui nous permet de spécialiser la fonction F de la classe C:
template <> void C<A *>::f(void) { traitement 2 };

Enfin une classe B héritant de A:
class B: public A { ... };

Mon problème est le suivant, je voudrai que la ligne suivante
effectue le "traitement 2":
C<B> o;
o.f();


Il y a une différence d'indirection entre C<A*> et C<B>. S'est volontaire ou
bien s'est une faute de frappe?

Arnaud