In genere mi piace organizzare le classi che creo in moduli usando gli spazi dei nomi, e anche io non passo più di 2 spazi dei nomi in profondità, ma è ancora faticosamente difficile qualificare completamente tutto.
Ho pensato di utilizzare utilizzando le direttive, ma non voglio che alcune intestazioni inquinino altre intestazioni. Ad esempio:
MyHeader1.hpp
namespace MyLibrary {
namespace MyModule1 {
class MyClass1 {
// stuff
};
} // namespace MyModule1
} // namespace MyLibrary
MyHeader2.hpp
namespace MyLibrary {
namespace MyModule2 {
// I can import stuff
// using namespace MyLibrary::MyModule1;
// using MyLibrary::MyModule1::MyClass1;
class MyClass2 {
public:
void DoSomething(MyLibrary::MyModule1::MyClass1 parameter); // I could do this
void DoSomething(MyClass1 parameter); // or this (easier)
};
} // namespace MyModule2
} // namespace MyLibrary
MyHeader3.hpp
#include <MyModule2/MyHeader2.hpp>
namespace MyLibrary {
namespace MyModule2 {
// I understand that MyClass3 may use MyClass1 from here (the using directive would be beneficial), but what if it doesn't; it's left hanging in here import-ed
// I can see MyLibrary::MyModule1::MyClass1 from here!
class MyClass3 {
MyClass2 some_var;
};
} // namespace MyModule 2
} // namespace MyLibrary
Il "problema" qui è che posso vedere MyClass1
in MyHeader3.hpp
nello spazio dei nomi MyModule2
se lo importiamo in MyHeader2.hpp
. Posso vedere che questo non sarebbe un problema se le direttive using fossero permesse nell'ambito della classe.
La domanda è, c'è un modo migliore per farlo, dovrei semplicemente mettere a punto e qualificare pienamente tutto o dovrei evitare del tutto gli spazi dei nomi?