Czy istnieje lepszy sposób wyrażania zagnieżdżonych przestrzeni nazw w C ++ w nagłówku

Przestawiłem się z C ++ na Javę i C # i myślę, że użycie przestrzeni nazw / pakietów jest tam znacznie lepsze (dobrze zorganizowane). Potem wróciłem do C ++ i próbowałem użyć przestrzeni nazw w ten sam sposób, ale wymagana składnia jest okropna w pliku nagłówkowym.

namespace MyCompany
{
    namespace MyModule
    {
        namespace MyModulePart //e.g. Input
        {
            namespace MySubModulePart
            {
                namespace ...
                {
                    public class MyClass    

Poniższe zdanie wydaje mi się dziwne (aby uniknąć głębokiego wcięcia):

namespace MyCompany
{
namespace MyModule
{
namespace MyModulePart //e.g. Input
{
namespace MySubModulePart
{
namespace ...
{
     public class MyClass
     {

Czy istnieje krótszy sposób wyrażenia powyższej rzeczy? Brakuje mi czegoś takiego

namespace MyCompany::MyModule::MyModulePart::...
{
   public class MyClass

Aktualizacja

Ok, niektórzy twierdzą, że koncepcja użycia w Javie / C # i C ++ jest inna. Naprawdę? Myślę, że (dynamiczne) ładowanie klas nie jest jedynym celem przestrzeni nazw (jest to bardzo techniczna perspektywa). Dlaczego nie powinienem go używać do czytelności i strukturyzacji, np. „IntelliSense”.

Obecnie nie ma logiki / kleju między przestrzenią nazw a tym, co można tam znaleźć. Java i C # robią to znacznie lepiej ... Dlaczego w tym<iostream> i posiadający przestrzeń nazwstd? Ok, jeśli powiesz, że logika powinna polegać na nagłówku, dlaczego #include nie używa przyjaznej składni „IntelliSense”, takiej jak#include <std::io::stream> lub<std/io/stream>? Myślę, że brakująca struktura w domyślnych bibliotekach to jedna słabość C ++ w porównaniu do Java / C #.

Jeśli wyjątkowość gorących konfliktów to jeden punkt (który jest także punktem C # i Javy), dobrym pomysłem jest użycie nazwy projektu lub nazwy firmy jako przestrzeni nazw, nie uważasz?

Z jednej strony mówi się, że C ++ jest najbardziej elastyczny ... ale wszyscy powiedzieli „nie rób tego”? Wydaje mi się, że C ++ może robić wiele rzeczy, ale ma okropną składnię nawet dla najłatwiejszych rzeczy w wielu przypadkach w porównaniu z C #.

Aktualizacja 2

Większość użytkowników twierdzi, że tworzenie głębszego zagnieżdżenia niż dwa poziomy jest nonsensem. Ok, więc co z obszarem nazw Windows :: UI :: Xaml i Windows :: UI :: Xaml :: Controls :: Primitives w rozwoju Win8? Myślę, że użycie przestrzeni nazw przez Microsoft ma sens i jest rzeczywiście głębsze niż tylko 2 poziomy. Myślę, że większe biblioteki / projekty wymagają głębszego zagnieżdżenia (nienawidzę nazw klas, takich jak ExtraLongClassNameBecauseEveryThingIsInTheSameNameSpace ... wtedy możesz umieścić wszystko w globalnej przestrzeni nazw.)

Aktualizacja 3 - Wnioski

Większość mówi „nie rób tego”, ale… nawet doładowanie ma głębsze zagnieżdżanie niż jeden lub dwa poziomy. Tak, to jest biblioteka, ale: Jeśli chcesz kod wielokrotnego użytku - traktuj swój kod jak bibliotekę, którą dasz komuś innemu. Używam także głębszego zagnieżdżania dla celów odkrywania przy użyciu przestrzeni nazw.

questionAnswers(10)

yourAnswerToTheQuestion