Miglior approccio per lo spazio dei nomi alias da config

1

Sto lavorando su una libreria che contiene un numero elevato di componenti con spazi dei nomi annidati. Inoltre, quando viene aggiunto un nuovo modulo all'interno della libreria, è necessario aggiungere lo spazio dei nomi e, a volte, questo spazio dei nomi può cambiare e quindi diventa fatale da mantenere.

Ho pensato a una soluzione oa un approccio per risolvere questo problema e ho trovato questa idea:

L'approccio ottimale sarebbe avere un file .h contenente tutti gli spazi dei nomi:

namespace Config {

     namespace PCA = LibraryName::Statistical::Components::PCA; 
}

E poi posso includere questo file di configurazione nella voce principale dell'applicazione ..

Ma, come sono arrivato a questo punto, ho problemi a raggiungere. Quindi ecco il mio processo di pensiero:

Se creo un% co_de "precompilato" che contiene qualcosa di simile (la sintassi non è corretta, ma vorrei analizzarla)

namespace Config {

     "aliases" = [

         "PCA" =>  "LibraryName::Statistical::Components::PCA"
      ];
}

Quindi, in qualche modo all'interno del Makefile analizza questa sintassi e genera un file .h, con gli alias al suo interno e quindi funzionerebbe .. Ma non so se questo è possibile con un Makefile?

Il secondo approccio, sarebbe quello di creare un comando shell, sulle linee di: Config.h che poi analizza questo file di configurazione e quindi genera il build_config da utilizzare nella voce del programma?

In alternativa, posso usare JSON e analizzare il JSON usando uno dei precedenti ..

Qualcuno può darmi qualche indicazione su quale approccio sarebbe meglio per questo, inoltre, questo sta solo causando problemi inutili?

ANCHE: Una serie di client / utenti ha anche chiesto la possibilità di cambiare gli alias dello spazio dei nomi ..

    
posta Phorce 26.08.2015 - 21:56
fonte

1 risposta

1

Questo è un classico problema XY . Hai il problema X, che causa il problema Y, quindi stai chiedendo la soluzione al problema Y. Ma il modo migliore per risolvere il problema Y è risolvere il problema X.

Si sta chiedendo di generare file di configurazione dell'alias namespace (Y). Ma il tuo vero problema (X) è che il tuo namespace è troppo complesso! Gli spazi dei nomi di C ++ non sono concepiti per essere profondamente annidati o particolarmente lunghi. Sono destinati ad essere brevi e non profondamente annidati. Generalmente un singolo spazio dei nomi è tutto ciò che è necessario per una libreria di piccole e medie dimensioni, e anche le librerie di grandi dimensioni se ben progettate possono sedersi in un singolo spazio dei nomi.

Quasi tutta la libreria standard C ++, non una piccola libreria, è in std . C'è anche std::chrono e un paio di altri domini specializzati, ma non usiamo std::containers::vector o std::algorithms::sorting::stable_sort , usiamo std::vector e std::stable_sort .

Semplifica il namespacing e non avrai bisogno di generare un file di configurazione dell'alias namespace o qualcosa di simile.

    
risposta data 07.09.2015 - 07:40
fonte

Leggi altre domande sui tag