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