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 

heritage et template

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Sebastien Tanguy
Guest





PostPosted: Thu Sep 15, 2005 7:45 pm    Post subject: heritage et template Reply with quote




Bonjour,

Soit le code suivant:

template <class U>
class Foo
{
public:
void doStuff(){}
};

template <class X>
class Quux : public Foo< X >
{
public:
void baaz(){
doStuff();
}
};


Celui-ci compile avec g++ 3.x, mais non avec g++ 4 ou Comeau, qui
n'arrivent pas à résoudre le nom de la méthode de la classe mère.

Je suppose que c'est dû au template, qui, sans instanciation, ne
connait le type exact de la classe mère. Et donc, j'aurais tendance à
croire que le nouveau g++ et Comeau sont dans le vrai (même si...).

Cependant, quelle serait la meilleure (ou plus propre) méthode pour
résoudre le problème? Utiliser un "using" pour introduire la méthode?
Préfixer explicitement par le nom de la classe mère paramètrée?
Utiliser systèmatiquement la notation "this->" ?


Merci d'avance.
seb.
Back to top
Fabien LE LEZ
Guest





PostPosted: Thu Sep 15, 2005 9:18 pm    Post subject: Re: heritage et template Reply with quote



On Thu, 15 Sep 2005 21:45:52 +0200, Sebastien Tanguy
<seb+news200509 (AT) death-gate (DOT) fr.eu.org>:

Quote:
Celui-ci compile avec g++ 3.x

Tiens, c'est marrant, j'aurais cru que 3.x râlerait (au moins la 3.4.2
qui est sur mon PC).

Quote:
Utiliser systèmatiquement la notation "this->" ?

A priori, c'est celle que je préfère, car on n'a pas besoin de faire
référence à quoi que ce soit d'autre -- on met un "this->" devant
chaque membre hérité et basta.


Back to top
Loïc Joly
Guest





PostPosted: Thu Sep 15, 2005 9:19 pm    Post subject: Re: heritage et template Reply with quote



Sebastien Tanguy a écrit :
Quote:
Bonjour,

Soit le code suivant:

template <class U
class Foo
{
public:
void doStuff(){}
};

template class Quux : public Foo< X
{
public:
void baaz(){
doStuff();
}
};

Disclaimer : Je suis pas certain de pas dire de conneries, et ai la
flemme de vérifier... ;)

Tel qu'écrit ici, doStuff n'a pas l'air au premier coup d'oeil de
dépendre de l'argument template T. Donc, le compilateur cherche cette
fonction avant d'instancier le template, et donc de voir qu'elle est
définie dans la classe de base (une spécialisation de Foo pourrait faire
qu'elle n'y est pas, par exemple).

Donc, il suffit de faire dépendre ce nom de T pour que ça marche. En
général, les gens utilisent this->doStuff() pour ça (en effet, this
dépend de T).

--
Loïc

Back to top
Fabien LE LEZ
Guest





PostPosted: Fri Sep 16, 2005 3:31 am    Post subject: Re: heritage et template Reply with quote

On Thu, 15 Sep 2005 23:18:09 +0200, Fabien LE LEZ
<gramster (AT) gramster (DOT) com>:

Quote:
Utiliser systèmatiquement la notation "this->" ?

A priori, c'est celle que je préfère

....du moins, si tu dois l'utiliser rarement.
Je suis en train de réparer un vieux code qui utilise fréquemment des
membres d'une classe de base, et je confirme que "using" est bien plus
pratique, car on n'a besoin de le spécifier qu'une seule fois :-)


Back to top
JBB
Guest





PostPosted: Fri Sep 16, 2005 11:35 am    Post subject: Re: heritage et template Reply with quote

Fabien LE LEZ a écrit :
Quote:
On Thu, 15 Sep 2005 23:18:09 +0200, Fabien LE LEZ
[email]gramster (AT) gramster (DOT) com[/email]>:


Utiliser systèmatiquement la notation "this->" ?

A priori, c'est celle que je préfère


...du moins, si tu dois l'utiliser rarement.
Je suis en train de réparer un vieux code qui utilise fréquemment des
membres d'une classe de base, et je confirme que "using" est bien plus
pratique, car on n'a besoin de le spécifier qu'une seule fois :-)

Pardonnez mon ignorance mais c'est quoi "using" (dans le cas du this) ?

Ca ne sert pas que pour les namespace?

JBB

Back to top
Fabien LE LEZ
Guest





PostPosted: Fri Sep 16, 2005 5:08 pm    Post subject: Re: heritage et template Reply with quote

On Fri, 16 Sep 2005 13:35:31 +0200, JBB <merci (AT) pasdespam (DOT) fr>:

Quote:
Pardonnez mon ignorance mais c'est quoi "using" (dans le cas du this) ?

Ça permet à un membre d'une classe de base de devenir membre à part
entière de la classe dérivée, et pas seulement membre par héritage.


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.