Я переключился с С++ на Java и С# и считаю, что использование пространств имен/пакетов намного лучше (хорошо структурировано). Затем я вернулся на С++ и попытался использовать пространства имен одинаково, но требуемый синтаксис ужасен внутри файла заголовка.
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
Обновление
Хорошо, некоторые говорят, что понятие использования в Java/С# и С++ отличается. В самом деле? Я думаю, что (динамическая) загрузка классов не является единственной целью для пространств имен (это очень технически обоснованная перспектива). Почему бы мне не использовать его для удобочитаемости и структуризации, например, подумайте о "IntelliSense".
В настоящее время нет никакой логики/клея между пространством имен и тем, что вы можете найти там. Java и С# делают это намного лучше... Зачем включать <iostream>
и иметь пространство имен std
?
Хорошо, если вы говорите, что логика должна полагаться на заголовок для включения, почему #include не использует дружественный синтаксис "IntelliSense", например #include <std::io::stream>
или <std/io/stream>
? Я думаю, что недостающее структурирование в libs по умолчанию - это одна слабость С++ по сравнению с Java/С#.
Если уникальность для авидных конфликтов - это одна точка (которая также является точкой С# и Java), хорошая идея - использовать имя проекта или название компании в качестве пространства имен, не так ли считаете?
С одной стороны, он сказал, что С++ является наиболее гибким... но все сказали "не делайте этого"? Мне кажется, что С++ может делать много вещей, но имеет ужасный синтаксис даже для самых простых вещей во многих случаях по сравнению с С#.
Обновление 2
Большинство пользователей говорят, что глупо создавать более глубокое гнездование, чем два уровня. Итак, как насчет Windows: UI:: Xaml и Windows:: UI:: Xaml:: Controls:: Primitives пространства имен в разработке Win8? Я думаю, что использование пространства имен Microsoft имеет смысл, и это действительно глубже, чем только 2 уровня. Я думаю, что более крупным библиотекам/проектам требуется более глубокое вложение (я ненавижу имена классов, такие как ExtraLongClassNameBecauseEveryThingIsInTheSameNameSpace... тогда вы могли бы поместить все в глобальное пространство имен тоже.)
Обновление 3 - Заключение
Большинство говорят, что "не делай этого", но... даже усиление имеет более глубокое гнездование, а затем один или два уровня. Да, это библиотека, но: Если вы хотите использовать многоразовый код - обрабатывайте свой собственный код, как библиотеку, которую вы дадите кому-то еще. Я также использую более глубокое вложение для целей поиска с использованием пространств имен.