namespace N1
{
namespace N2
{
class A
{
public:
void test()
{
std::cout<<"N1::N2::TestA"<<std::endl;
}
};
}
}
namespace N2
{
class A
{
public:
void test()
{
std::cout<<"subname::TestA"<<std::endl;
}
};
}
namespace N1
{
namespace N3
{
void monTest()
{
N2::A monA; // Probl=E8me ici. Je ne peux pas modifier cette
ligne...
monA.test();
}
}
}
int main()
{
name::subname2::monTest();
char key;
std::cin>>key;
return 0;
}
A la ligne "N2::A monA", j'aimerais lui dire de prendre le ::N2::A et
non pas le N1::N2::A.
Existe t'il un moyen de le faire proprement et de mani=E8re globale ? Je
pr=E9cise que si je dois modifier toutes les lignes qui posent probl=E8me,
=E7a risque de prendre plusieurs jours (et de rajouter des probl=E8mes).
C'est pour cette raison que je pr=E9f=E8re =E9viter ceci.
On Wed, 6 Aug 2008 01:01:11 +0200, "Patrick 'Zener' Brunet" :
>Ainsi, voyez-vous, je persiste à considérer que dès lors que >l'on utilise intensivement un ou plusieurs namespaces dans un >module, il est intéressant de se donner les moyens de faire >un/plusieurs using au début de ce module pour y travailler >plus simplement avec les identifiants nus.
Certes. Mais "using" peut s'utiliser de deux façons différentes : using std::string; using namespace std;
La première introduit un nom précis, "string". À chaque fois que je tape "string" quelque part dans mon code, je suis conscient qu'il s'agit de std::string.
La deuxième introduit plein de noms, dont je ne connais pas la moitié. Si j'utilise le mot "greater" quelque part dans mon code, je ne serai pas forcément conscient qu'il y a un conflit avec std::greater, d'autant que je n'ai jamais utilisé ce dernier.
La solution la plus fiable me paraît donc d'utiliser des namespaces, et utiliser using pour introduire les identifiants les plus fréquemment utilisés.
Surtout que le « using » respecte la portée. Il m'arrive bien de faire quelque chose du genre « using namespace A::B » (où A et B sont en fait bien plus longs) dans une fonction, par exemple. Voire même dans un namespace privé.
-- James Kanze (GABI Software) email: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
On Aug 6, 1:20 am, Fabien LE LEZ <grams...@gramster.com> wrote:
On Wed, 6 Aug 2008 01:01:11 +0200, "Patrick 'Zener' Brunet" :
>Ainsi, voyez-vous, je persiste =E0 consid=E9rer que d=E8s lors que
>l'on utilise intensivement un ou plusieurs namespaces dans un
>module, il est int=E9ressant de se donner les moyens de faire
>un/plusieurs using au d=E9but de ce module pour y travailler
>plus simplement avec les identifiants nus.
Certes. Mais "using" peut s'utiliser de deux fa=E7ons diff=E9rentes :
using std::string;
using namespace std;
La premi=E8re introduit un nom pr=E9cis, "string". =C0 chaque fois
que je tape "string" quelque part dans mon code, je suis
conscient qu'il s'agit de std::string.
La deuxi=E8me introduit plein de noms, dont je ne connais pas la
moiti=E9. Si j'utilise le mot "greater" quelque part dans mon
code, je ne serai pas forc=E9ment conscient qu'il y a un conflit
avec std::greater, d'autant que je n'ai jamais utilis=E9 ce
dernier.
La solution la plus fiable me para=EEt donc d'utiliser des
namespaces, et utiliser using pour introduire les identifiants
les plus fr=E9quemment utilis=E9s.
Surtout que le =AB using =BB respecte la port=E9e. Il m'arrive bien
de faire quelque chose du genre =AB using namespace A::B =BB (o=F9 A
et B sont en fait bien plus longs) dans une fonction, par
exemple. Voire m=EAme dans un namespace priv=E9.
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orient=E9e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S=E9mard, 78210 St.-Cyr-l'=C9cole, France, +33 (0)1 30 23 00 34
On Wed, 6 Aug 2008 01:01:11 +0200, "Patrick 'Zener' Brunet" :
>Ainsi, voyez-vous, je persiste à considérer que dès lors que >l'on utilise intensivement un ou plusieurs namespaces dans un >module, il est intéressant de se donner les moyens de faire >un/plusieurs using au début de ce module pour y travailler >plus simplement avec les identifiants nus.
Certes. Mais "using" peut s'utiliser de deux façons différentes : using std::string; using namespace std;
La première introduit un nom précis, "string". À chaque fois que je tape "string" quelque part dans mon code, je suis conscient qu'il s'agit de std::string.
La deuxième introduit plein de noms, dont je ne connais pas la moitié. Si j'utilise le mot "greater" quelque part dans mon code, je ne serai pas forcément conscient qu'il y a un conflit avec std::greater, d'autant que je n'ai jamais utilisé ce dernier.
La solution la plus fiable me paraît donc d'utiliser des namespaces, et utiliser using pour introduire les identifiants les plus fréquemment utilisés.
Surtout que le « using » respecte la portée. Il m'arrive bien de faire quelque chose du genre « using namespace A::B » (où A et B sont en fait bien plus longs) dans une fonction, par exemple. Voire même dans un namespace privé.
-- James Kanze (GABI Software) email: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34