Sono passato da C ++ a Java e C # e penso che l'uso di spazi dei nomi / pacchetti sia molto migliore lì (ben strutturato). Poi sono tornato a C ++ e ho provato a usare gli spazi dei nomi allo stesso modo, ma la sintassi richiesta è orribile all'interno del file di intestazione.
namespace MyCompany
{
namespace MyModule
{
namespace MyModulePart //e.g. Input
{
namespace MySubModulePart
{
namespace ...
{
public class MyClass
Anche quanto segue mi sembra strano (per evitare il rientro profondo):
namespace MyCompany
{
namespace MyModule
{
namespace MyModulePart //e.g. Input
{
namespace MySubModulePart
{
namespace ...
{
public class MyClass
{
C'è un modo più breve per esprimere quanto sopra? Mi manca qualcosa di simile
namespace MyCompany::MyModule::MyModulePart::...
{
public class MyClass
Aggiornare
Ok, alcuni dicono che il concetto di utilizzo in Java / C # e C ++ è diverso. Veramente? Penso che il caricamento delle classi (dinamico) non sia l'unico scopo per i namespace (questa è una prospettiva ragionata molto tecnica). Perché non dovrei usarlo per una leggibilità e strutturazione, ad esempio pensare a "IntelliSense".
Attualmente, non esiste alcuna logica / colla tra uno spazio dei nomi e ciò che puoi trovare lì. Java e C # lo fanno molto meglio ... Perché includere <iostream>
e avere lo spazio dei nomi std
? Ok, se dici che la logica dovrebbe fare affidamento sull'intestazione da includere, perché #include non utilizza una sintassi amichevole "IntelliSense" come #include <std::io::stream>
o <std/io/stream>
? Penso che la strutturazione mancante nelle librerie predefinite sia una debolezza di C ++ rispetto a Java / C #.
Se l'unicità di conflitti avidi è un punto (che è anche un punto di C # e Java) una buona idea è usare il nome del progetto o il nome dell'azienda come spazio dei nomi, non credi?
Da un lato si dice che il C ++ è il più flessibile ... ma tutti hanno detto "non farlo"? Mi sembra che il C ++ possa fare molte cose ma ha una sintassi orribile anche per le cose più semplici in molti casi rispetto a C #.
Aggiorna 2
La maggior parte degli utenti afferma che non ha senso creare un annidamento più profondo di due livelli. Ok, allora che dire degli spazi dei nomi Windows :: UI :: Xaml e Windows :: UI :: Xaml :: Controls :: Primitives nello sviluppo di Win8? Penso che l'utilizzo degli spazi dei nomi da parte di Microsoft abbia senso ed è effettivamente più profondo di soli 2 livelli. Penso che librerie / progetti più grandi necessitino di un annidamento più profondo (odio i nomi di classi come ExtraLongClassNameBecauseEveryThingIsInTheSameNameSpace ... quindi potresti mettere tutto anche nello spazio dei nomi globale.)
Aggiornamento 3 - Conclusione
La maggior parte dice "non farlo", ma ... anche il boost ha una nidificazione più profonda di uno o due livelli. Sì, è una libreria ma: se vuoi codice riutilizzabile, tratta il tuo codice come una libreria che daresti a qualcun altro. Uso anche una nidificazione più profonda per scopi di scoperta utilizzando spazi dei nomi.
namespace
parole chiave?