C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Typedef et templates

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Frédéric Mayot
Guest





PostPosted: Wed Feb 11, 2004 10:15 am    Post subject: Typedef et templates Reply with 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<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





PostPosted: Wed Feb 11, 2004 10:30 am    Post subject: Re: Typedef et templates Reply with quote



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





PostPosted: Wed Feb 11, 2004 10:34 am    Post subject: Re: Typedef et templates Reply with quote



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





PostPosted: Wed Feb 11, 2004 3:36 pm    Post subject: Re: Typedef et templates Reply with quote

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





PostPosted: Wed Feb 11, 2004 3:36 pm    Post subject: Re: Typedef et templates Reply with quote

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





PostPosted: Wed Feb 11, 2004 5:13 pm    Post subject: Re: Typedef et templates Reply with quote

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





PostPosted: Thu Feb 12, 2004 4:33 pm    Post subject: Re: Typedef et templates Reply with quote

Frédéric Mayot a écrit :
Quote:
Bonjour,


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





PostPosted: Thu Feb 12, 2004 4:58 pm    Post subject: Re: Typedef et templates Reply with quote

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
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
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


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.