Есть ли лучший способ выразить вложенные пространства имен в C ++ в заголовке

Я переключился с C ++ на Java и C # и думаю, что использование пространств имен / пакетов там намного лучше (хорошо структурировано). Затем я вернулся на C ++ и попытался использовать пространства имен таким же образом, но требуемый синтаксис ужасен в заголовочном файле.

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

Мне тоже кажется странным следующее (чтобы избежать глубокого отступа):

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

Есть ли более короткий способ выразить вышесказанное? Мне не хватает чего-то вроде

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

Update

Хорошо, некоторые говорят, что концепция использования в Java / C # и C ++ отличается. В самом деле? Я думаю, что (динамическая) загрузка классов - не единственная цель для пространств имен (это очень технически обоснованная перспектива). Почему я не должен использовать его для удобочитаемости и структуризации, например, подумайте о «IntelliSense».

В настоящее время нет логики / клея между пространством имен и тем, что вы можете найти там. Java и C # делают это намного лучше ... Почему в том числе<iostream> и имея пространство именstd? Ok, if you say the logic should rely on the header to include, why does the #include does not uses an "IntelliSense" friendly syntax like #include <std::io::stream> или же<std/io/stream>? Я думаю, что отсутствие структуризации в библиотеках по умолчанию является одной из слабостей C ++ по сравнению с Java / C #.

Если уникальность для острых конфликтов - это одна точка (что является точкой C # и Java), то хорошей идеей является использование имени проекта или названия компании в качестве пространства имен, вы так не думаете?

С одной стороны, он сказал, что C ++ является наиболее гибким ... но все сказали, что "не делайте этого"? Мне кажется, что C ++ может делать много вещей, но имеет ужасный синтаксис даже для самых простых вещей во многих случаях по сравнению с C #.

Update 2

Большинство пользователей говорят, что создавать более глубокую вложенность, чем два Уровня, - глупость. Хорошо, а как насчет Windows :: UI :: Xaml и Windows :: UI :: Xaml :: Controls :: Примитивы пространства имен в разработке Win8? Я думаю, что использование Microsoft пространств имен имеет смысл, и это действительно глубже, чем просто 2 уровня. Я думаю, что большие библиотеки / проекты нуждаются в более глубоком вложении (я ненавижу имена классов, такие как ExtraLongClassNameBecauseEveryThingIsInTheSameNameSpace ... тогда вы можете поместить все в глобальное пространство имен.

Update 3 - Conclusion

Большинство говорят «не делай этого», но ... даже повышение имеет более глубокое вложение, чем один или два уровня. Да, это библиотека, но: если вы хотите повторно использовать код - относитесь к своему коду как к библиотеке, которую вы бы дали кому-то другому. Я также использую более глубокое вложение для целей обнаружения с использованием пространств имен.

Ответы на вопрос(10)

Ваш ответ на вопрос