 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Frédéric Mayot Guest
|
Posted: Wed Feb 11, 2004 10:15 am Post subject: Typedef et templates |
|
|
Bonjour,
Une question peut-être bête (?)
J'ai un modèle de classe disons :
template <typename T> class A;
Je veux que A soit équivalent à telle ou telle autre classe suivant un
paramètre défini à la compilation. Pour cela, j'utilise une classe
helper partiellement spécialisée :
template <typename T, typename PARAM> struct helper_A {};
template <typename T> struct helper_A<T, XXX> { typedef MaClasse1
mon_type;};
template <typename T> struct helper_A<T, YYY> { typedef MaClasse2
mon_type;};
Maintenant, je voudrais que A devienne équivalent à MaClasse1 ou
MaClasse2. Je le fais avec un héritage publique :
template <typename T>
class A : public helper_A<T, T::param>::mon_type {};
Cela fonctionne mais j'aurais voulu le faire avec un typedef (problème
des constructeurs non triviaux à redéfinir, etc.). Seul souci, je ne
vois pas comment ?...
Merci.
Fred
|
|
| Back to top |
|
 |
Matthieu Moy Guest
|
Posted: Wed Feb 11, 2004 10:30 am Post subject: Re: Typedef et templates |
|
|
Frédéric Mayot <toto (AT) toto (DOT) com> writes:
| Quote: | template <typename T
class A : public helper_A
Cela fonctionne mais j'aurais voulu le faire avec un typedef (problème
des constructeurs non triviaux à redéfinir, etc.). Seul souci, je ne
vois pas comment ?...
|
template <typename T>
class A : public helper_A<T, T::param>::mon_type {
typedef helper_A<T, T::param>::mon_type base_class;
...
[ code utilisant "base_class" ]
};
?
--
Matthieu
|
|
| Back to top |
|
 |
Frédéric Mayot Guest
|
Posted: Wed Feb 11, 2004 10:34 am Post subject: Re: Typedef et templates |
|
|
Matthieu Moy wrote:
| Quote: | template <typename T
class A : public helper_A
typedef helper_A<T, T::param>::mon_type base_class;
...
[ code utilisant "base_class" ]
};
|
Heu, non, c'est pas le but du tout... La classe A n'est pas sensé avoir
quelque ligne de code que ce soit. Je veux juste la rendre équivalente à
MaClasse1 ou MaClasse2 dans mon exemple.
|
|
| Back to top |
|
 |
Frédéric Mayot Guest
|
Posted: Wed Feb 11, 2004 3:36 pm Post subject: Re: Typedef et templates |
|
|
Yannick Le goc wrote:
| Quote: | Dans mon cas, je comprends que tu voudrais qu'a l'instanciation de A,
A<Toto> soit equivalent (quelle definition de l'equivalence en C++?) a
MaClasse1 ou bien MaClasse2.
|
En gros, je voudrais (c'est syntaxiquement faux, mais c'est peut-être
plus parlant) :
typedef MaClasse1 A<Toto1>;
typedef MaClasse2 A<Toto2>;
| Quote: | Donc la classe helper est le seul moyen: mais alors pqoi definir class A
: helper_A, alors que tu peux utiliser directement helper?
|
J'utilise A pour simplifier, c'est à dire que je supprime le paramètre
PARAM inutile qui dépend du paramètre T.
|
|
| Back to top |
|
 |
Yannick Le goc Guest
|
Posted: Wed Feb 11, 2004 3:36 pm Post subject: Re: Typedef et templates |
|
|
Frédéric Mayot wrote:
| Quote: | Bonjour,
Une question peut-être bête (?)
J'ai un modèle de classe disons :
template <typename T> class A;
Je veux que A soit équivalent à telle ou telle autre classe suivant un
paramètre défini à la compilation. Pour cela, j'utilise une classe
helper partiellement spécialisée :
template <typename T, typename PARAM> struct helper_A {};
template <typename T> struct helper_A<T, XXX> { typedef MaClasse1
mon_type;};
template <typename T> struct helper_A<T, YYY> { typedef MaClasse2
mon_type;};
Maintenant, je voudrais que A devienne équivalent à MaClasse1 ou
MaClasse2. Je le fais avec un héritage publique :
template <typename T
class A : public helper_A
Cela fonctionne mais j'aurais voulu le faire avec un typedef (problème
des constructeurs non triviaux à redéfinir, etc.). Seul souci, je ne
vois pas comment ?...
Merci.
Fred
Pas tres clair ce que tu veux, je pense que ca vient surtout de la ton |
pb: tu n'as pas bien pose le pb.
Dans mon cas, je comprends que tu voudrais qu'a l'instanciation de A,
A<Toto> soit equivalent (quelle definition de l'equivalence en C++?) a
MaClasse1 ou bien MaClasse2.
Si tu veux l'egalite stricte, ce n'est pas possible. A<Toto> sera
forcement un nouveau type.
Donc la classe helper est le seul moyen: mais alors pqoi definir class A
: helper_A, alors que tu peux utiliser directement helper?
Yannick
|
|
| Back to top |
|
 |
Yannick Le goc Guest
|
Posted: Wed Feb 11, 2004 5:13 pm Post subject: Re: Typedef et templates |
|
|
Frédéric Mayot wrote:
| Quote: | Yannick Le goc wrote:
Dans mon cas, je comprends que tu voudrais qu'a l'instanciation de A,
A<Toto> soit equivalent (quelle definition de l'equivalence en C++?) a
MaClasse1 ou bien MaClasse2.
En gros, je voudrais (c'est syntaxiquement faux, mais c'est peut-être
plus parlant) :
typedef MaClasse1 A<Toto1>;
typedef MaClasse2 A<Toto2>;
impossible |
| Quote: | Donc la classe helper est le seul moyen: mais alors pqoi definir class
A : helper_A, alors que tu peux utiliser directement helper?
J'utilise A pour simplifier, c'est à dire que je supprime le paramètre
PARAM inutile qui dépend du paramètre T.
|
A mon sens, ta solution n'est pas mauvaise, sauf que si c'est juste par
souci d'elegance ca n'a pas vraiment d'interet.
Tu peux ecrire aussi:
template<class T>
struct A {typedef typename helper_A<T, T::param>::mon_type mon_type;};
et l'utiliser A<Toto>::mon_type, ce sera plus dans l'esprit des
templates (c++ traits pattern)
|
|
| Back to top |
|
 |
Christophe de VIENNE Guest
|
Posted: Thu Feb 12, 2004 4:33 pm Post subject: Re: Typedef et templates |
|
|
Frédéric Mayot a écrit :
Bonjour !
[snip]
| Quote: |
Cela fonctionne mais j'aurais voulu le faire avec un typedef (problème
des constructeurs non triviaux à redéfinir, etc.). Seul souci, je ne
vois pas comment ?...
|
Si j'ai bien compris ton problème, je crois que ce n'est pas possible,
mais le deviendra peut-être si les typedef template sont introduits dans
la norme. Ce message de Gabriel :
http://groups.google.fr/groups?hl=fr&lr=&ie=UTF-8&selm=flbrs8nu10.fsf%40sel.cmla.ens-cachan.fr
contient des liens interessants sur le sujet.
A+
Christophe
|
|
| Back to top |
|
 |
Frédéric Mayot Guest
|
Posted: Thu Feb 12, 2004 4:58 pm Post subject: Re: Typedef et templates |
|
|
Christophe de VIENNE wrote:
| Quote: | Frédéric Mayot a écrit :
Bonjour,
Bonjour !
[snip]
Cela fonctionne mais j'aurais voulu le faire avec un typedef (problème
des constructeurs non triviaux à redéfinir, etc.). Seul souci, je ne
vois pas comment ?...
Si j'ai bien compris ton problème, je crois que ce n'est pas possible,
mais le deviendra peut-être si les typedef template sont introduits dans
la norme. Ce message de Gabriel :
http://groups.google.fr/groups?hl=fr&lr=&ie=UTF-8&selm=flbrs8nu10.fsf%40sel.cmla.ens-cachan.fr
contient des liens interessants sur le sujet.
A+
Christophe
|
Merci beaucoup pour l'info, c'est exactement ce que je cherchais... mais
ça n'est pas encore dispo...
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|