Non usi gli spazi dei nomi per separare l'interfaccia dall'implementazione in C ++. I namespace sono essenzialmente pacchetti in C ++; li usi per raggruppare le classi correlate.
Piuttosto, usi classi per nascondere i dettagli dell'implementazione all'utente. Le classi in C ++ sono le stesse delle classi in qualsiasi altro linguaggio OOP a tale riguardo; forniscono un'interfaccia pubblica, mentre incapsulano i dettagli di implementazione.
Nella risposta Overflow dello stack che hai collegato, l'autore ha collegato questo articolo . In poche parole, in questo articolo si afferma che tutte le funzioni di aiuto e le funzioni dell'operatore che fanno parte della funzionalità di una classe dovrebbero entrare nello stesso spazio dei nomi della classe, perché formano parte dell'API pubblica di tale spazio dei nomi.
Questo ha senso per me. Avendo quelle funzioni nello stesso spazio dei nomi organizza le classi (e le funzioni che li supportano) all'interno della stessa unità logica, un'unità logica che espone un'API pubblica, ma incapsula i dettagli dell'implementazione usando i normali principi di orientamento agli oggetti.
Ulteriori letture
Separazione dell'interfaccia e dell'implementazione in C ++
La separazione di interfaccia e implementazione in C ++
Namespace e il principio dell'interfaccia