Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Ordre résolution des namespaces

11 réponses
Avatar
Korchkidu
Bonjour =E0 tous,

J'ai un truc comme suit :

#include <iostream>

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.

Merci d'avance pour votre aide.
K.

1 réponse

1 2
Avatar
James Kanze
On Aug 6, 1:20 am, Fabien LE LEZ wrote:
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
1 2