I namespace sono un metodo importante per organizzare il codice.
Due funzioni potrebbero avere una collisione di nomi, che si può risolvere mettendole in namespace diversi.
I namespace possono essere annidati, il che può aiutare a strutturare grandi basi di codice.
L'accesso ai namespace avviene tramite l'operatore di risoluzione dello scope ::.
L'esempio seguente mostra l'uso di due diverse funzioni foo.
Vengono usate insieme anteponendo i rispettivi namespace.
namespace my_ns {
int foo() {
return 44;
}
namespace my_inner_ns {
int baz() {
return 90;
}
}
}
namespace my_other_ns {
int foo() {
return -2;
}
}
int myresult{my_ns::foo() + my_other_ns::foo() * my_ns::my_inner_ns::baz()};
I namespace annidati in profondità potrebbero risultare troppo verbosi.
È possibile eliminare la verbosità importando un namespace con using.
Questo sposta tutti i nomi nel namespace globale.
Per mantenere un po' di differenziazione, gli alias potrebbero essere utili.
int my_other_result{my_ns::my_inner_ns::baz()};
using namespace my_ns::my_inner_ns; // importing the complete namespace
int also_other_result{baz()};
namespace m = my_ns; // setting an alias
namespace o = my_other_ns;
int also_my_result{m::foo() + o::foo() * m::my_inner_ns::baz()};