Originariamente inviato da fbcyborg
Pensavo che il namespace fosse una cosa analoga, nel senso di "raggruppare" classi che riguardano una stessa "circostanza" in un progetto.
Da un punto di vista pragmatico un namespace è un trucco introdotto per evitare le collisioni dei nomi. Mettiamo che tu voglia scrivere una tua classe vector<> e decidessi di usarla insieme alla classe vector<> della libreria standard (premettendo lo using namespace std), il compilatore non saprebbe cosa dovrebbe istanziare: se la vector<> standard o la tua. Mettendo la tua classe in un namespace, basta premetterlo alla tua classe quando vuoi usarla e i conflitti spariscono.

Ad esempio, se ho un progetto in cui ho una serie di classi che realizzano la logica DAO per l'accesso ad un database, quelle saranno tutte dello stesso genere, e in Java le racchiudo in un package chiamato "dao" (ad esempio). Allo stesso modo in C++, quello che avrei fatto sarebbe stato appunto quello di catalogarle tutte nello stesso namespace.
In questo caso il package Java è la libreria C++ (che sia in .lib o sorgente non importa. In quest'ultimo caso è comodo dividere in dao\include e dao \src, ad esempio), ma come già detto il namespace non è obbligatorio (anche se molto comodo).