Convenzione di denominazione C ++ per i file all'interno dei namespace

0

Attualmente sto lavorando a un progetto C ++ con una struttura di file sorgente come questa (escluse le intestazioni):

src/
├── namespace1/
│   ├── namespace1_base.cpp
│   ├── namespace1_derived1.cpp
│   └── namespace1_derived2.cpp
├── namespace2/
│   ├── namespace2_base.cpp
│   ├── namespace2_derived3.cpp
│   └── namespace2_derived4.cpp
├── other.cpp
└── files.cpp

L'unica cosa fastidiosa che usa questa convenzione è includere i file perché devo usare

#include "src/namespace1/namespace1_derived1.cpp"

Sembra strano e non necessario digitare due volte lo spazio dei nomi. È considerato una buona pratica o dovrei organizzare i miei file sorgente in modo diverso?

    
posta jsmolka 10.11.2018 - 23:32
fonte

1 risposta

2

Per quanto riguarda il linguaggio C ++, i nomi di file duplicati non sono affatto un problema. Un problema tangenziale è quello di include guardie che deve essere effettivamente univoco per unità di traduzione, quindi usando un nome di file come intestazione il nome della macro di guardia non è sufficiente. Tuttavia, l'uso della direttiva #pragma once non standard e ampiamente supportata elimina completamente il problema.

Ma se altri strumenti non possono gestire nomi di file duplicati in un progetto, e devi usare quegli strumenti, allora dovrai convivere con questa restrizione. Ad esempio, un sistema di build danneggiato potrebbe voler compilare sia foo/myclass.cpp che bar/myclass.cpp in un file build/myclass.o . Idealmente, il sistema di generazione può essere configurato per evitare questo problema (ad es. Costruendo ogni spazio dei nomi come progetto separato), e se non prefiggere i nomi dei file come nella domanda è una soluzione brutta ma accettabile.

    
risposta data 11.11.2018 - 12:06
fonte

Leggi altre domande sui tag