Ho ereditato un orribile bit di codice legacy che include circa 1000 righe di definizione di classe di utilità che devono essere visualizzate prima del codice "reale" in un file di origine. Per evitare scontri con altri moduli che potrebbe anche hanno associato le classi precedenti, ho messo la classe di utilità in un namespace anonimo:C'è un solo spazio dei nomi senza nome per unità di compilazione?
namespace {
class OldUtils {
OldUtils();
int foo();
double bar();
};
OldUtils::OldUtils() {
// hundreds of lines
}
int OldUtils::foo() {
// hundreds more lines
}
...
}
class ActuallyInteresting {
// uses OldUtils
};
Ma io preferirei avere il codice ActuallyInteresting
che la gente sarà (in realtà) interessati a vicino alla parte superiore del file, ad es a partire dalla riga 50, che a destra in basso, ad es. a partire dalla linea 1000. La suddivisione dell'horrid utility class in un'unità di compilazione separata non è un'opzione, per ragioni di livello superiore a cui non entrerò!
Quindi mi chiedo se sia possibile inserire la dichiarazione della classe breve, senza le definizioni dei metodi, in uno spazio dei nomi senza nome nella parte superiore del file e le definizioni dei metodi molto più lunghe in un altro spazio dei nomi senza nome nella parte inferiore:
namespace {
class OldUtils {
OldUtils();
int foo();
double bar();
};
}
class ActuallyInteresting {
// uses OldUtils
};
namespace {
OldUtils::OldUtils() {
// hundreds of lines
}
int OldUtils::foo() {
// hundreds more lines
}
...
}
saranno questi due namespace senza nome "separare" trattati come la stessa portata nell'unità di compilazione, o saranno diversi spazi dei nomi univoci essere generato per ciascuno? Lo standard ha qualcosa da dire su questo?
ogni spazio dei nomi senza nome sarà unico per ogni unità di traduzione (lo stesso statico in un unità di traduzione) –
@ DieterLücking: Se questo è vero, come si fa accesso una variabile globale in uno spazio dei nomi senza nome in un'altra unità di traduzione? Il nome dell'altra unità di traduzione viene aggiunto al testo della risoluzione dell'oscilloscopio? –