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 :
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 ?...
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Matthieu Moy
Frédéric Mayot writes:
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 ?...
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
Frédéric Mayot <toto@toto.com> writes:
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 ?...
template <typename T>
class A : public helper_A<T, T::param>::mon_type {
typedef helper_A<T, T::param>::mon_type base_class;
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 ?...
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
Frédéric Mayot
Matthieu Moy wrote:
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" ]
};
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.
Matthieu Moy wrote:
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" ]
};
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.
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" ]
};
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.
Frédéric Mayot
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>;
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.
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>;
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.
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>;
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.
Yannick Le goc
Frédéric Mayot wrote:
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 :
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 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
Frédéric Mayot wrote:
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 :
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
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?
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 :
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 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
Yannick Le goc
Frédéric Mayot wrote:
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
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)
Frédéric Mayot wrote:
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
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)
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
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)
Christophe de VIENNE
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
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.
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
Frédéric Mayot
Christophe de VIENNE wrote:
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...
Christophe de VIENNE wrote:
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...
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...