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 

utilisation du nom d'une classe template dans sa déclaration

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





PostPosted: Sat Aug 12, 2006 1:26 am    Post subject: utilisation du nom d'une classe template dans sa déclaration Reply with quote



Bonjour,

J'ai posé beaucoup de questions sur ce forum ces derniers temps, merci
pour votre aide.

J'ai récemment voulu écrire un code et me suis heurté à un problème
équivalent au problème suivant.

Le code ci-après, qui ne sert pas à grand chose, ne compile pas :

#include<iostream>
#include<cstdlib>
#include<string>

template<unsigned short N,template<unsigned short> class T>
struct A{

static std::string getName(void){
return T<N>::getName();
}

};

template<unsigned short N>
struct B{

static std::string Name(void)
{
return A<N,B>::getName(); // Ici erreur
}

static std::string getName(void)
{
return "B";
}

};

int main(void)
{

std::cout << B<2u>::Name() << std::endl;

return EXIT_SUCCESS;
}

Le problème vient du fait que dans la déclaration de la classe, B est
compris, au moins par gcc, comme B<N>.

Y a t'il un moyen de rendre ce code valide ?

Cordialement,

Helfer Thomas
Back to top
Cyrille
Guest





PostPosted: Sat Aug 12, 2006 2:37 am    Post subject: Re: utilisation du nom d'une class e template dans sa déclar Reply with quote



Helfer Thomas a écrit :
Quote:
Bonjour,

Le problème vient du fait que dans la déclaration de la classe, B est
compris, au moins par gcc, comme B<N>.

Oui, à l'intérieur de la classe, le nom B désigne B<N>.

Quote:
Y a t'il un moyen de rendre ce code valide ?

Prendre le nom "à l'extérieur de la classe" en s'aidant de l'opérateur
de résolution de portée.

Ainsi, remplacez B par ::B dans la ligne qui fait désordre:
return A<N,::B>::getName(); // Plus d'erreur

Ça marche avec Visual C++ 2005 et Comeau.

Au passage, en C++, mettre void en paramètre des fonctions pour dire
qu'elles n'ont pas de paramètres, est inutile.

--
C'est ma signature qu'elle est la mieux. Pas la vôtre.
Back to top
Helfer Thomas
Guest





PostPosted: Sat Aug 12, 2006 9:11 am    Post subject: Re: Re: utilisation du nom d'une classe template dans sa déc Reply with quote



Le Fri, 11 Aug 2006 23:37:37 +0200, Cyrille a écrit :

Quote:
Helfer Thomas a écrit :
Bonjour,

Le problème vient du fait que dans la déclaration de la classe, B est
compris, au moins par gcc, comme B<N>.

Oui, à l'intérieur de la classe, le nom B désigne B<N>.

Y a t'il un moyen de rendre ce code valide ?

Prendre le nom "à l'extérieur de la classe" en s'aidant de l'opérateur
de résolution de portée.

Ainsi, remplacez B par ::B dans la ligne qui fait désordre:
return A<N,::B>::getName(); // Plus d'erreur

Ça marche avec Visual C++ 2005 et Comeau.
Cela marche aussi avec gcc


merci

Quote:

Au passage, en C++, mettre void en paramètre des fonctions pour dire
qu'elles n'ont pas de paramètres, est inutile.

Oui, c'est un choix personnel, je trouve le code plus lisible Smile
Back to top
Gabriel Dos Reis
Guest





PostPosted: Sat Aug 12, 2006 6:30 pm    Post subject: Re: utilisation du nom d'une classe template dans sa déclara Reply with quote

Helfer Thomas <helferthomas.@free.fr> writes:

| Le Fri, 11 Aug 2006 23:37:37 +0200, Cyrille a écrit :
|
| > Helfer Thomas a écrit :
| >> Bonjour,
| >>
| >> Le problème vient du fait que dans la déclaration de la classe, B est
| >> compris, au moins par gcc, comme B<N>.
| >
| > Oui, à l'intérieur de la classe, le nom B désigne B<N>.
| >
| >> Y a t'il un moyen de rendre ce code valide ?
| >
| > Prendre le nom "à l'extérieur de la classe" en s'aidant de l'opérateur
| > de résolution de portée.
| >
| > Ainsi, remplacez B par ::B dans la ligne qui fait désordre:
| > return A<N,::B>::getName(); // Plus d'erreur
| >
| > Ça marche avec Visual C++ 2005 et Comeau.
| Cela marche aussi avec gcc

Oui, c'est la manière standard de faire.

| > Au passage, en C++, mettre void en paramètre des fonctions pour dire
| > qu'elles n'ont pas de paramètres, est inutile.
|
| Oui, c'est un choix personnel, je trouve le code plus lisible :)

C'est une abomination, selon Doug MycIlroy et Dennis Ritchie.
:-)

-- Gaby
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.