Для чего предназначены пространства имен:
Пространства имен предназначены только для установления контекста, поэтому у вас нет именных конфликтов.
Общие правила:
Указывать слишком много контекста не нужно, и это вызовет больше неудобств, чем оно того стоит.
Итак, вы хотите использовать свое лучшее суждение, но все же следуйте этим двум правилам:
- Не будьте слишком общими при использовании пространств имен
- Не будьте слишком конкретны при использовании пространств имен
Я бы не стал так строго относиться к тому, как использовать имена пространств имен и просто использовать пространства имен на основе связанной группы кода.
Почему слишком общие пространства имен не помогают:
Проблема с разделением пространства имен, начинающегося с названия продукта, заключается в том, что у вас часто будет компонент кода или некоторая базовая библиотека, общая для нескольких продуктов.
Вы также не будете использовать пространства имен Product2 внутри Product1, поэтому указывать его явно бессмысленно. Если вы включали файлы Product2 в Product1, то это преобразование имен все еще полезно?
Почему слишком специфичные пространства имен бесполезны:
Если у вас слишком специфичные пространства имен, граница между этими различными пространствами имен начинает размываться. Вы начинаете использовать пространства имен внутри друг друга взад и вперед. В настоящее время лучше обобщить общий код вместе в одном пространстве имен.
Классы со всеми статическими и шаблонами:
"Почему мы не должны создавать внутреннюю
частные классы, а не пространства имен?
Почему мы должны создавать классы, где все
методы статичны "
Некоторые отличия:
- Пространства имен могут подразумеваться с помощью ключевого слова
using
- Пространства имен могут быть псевдонимами, классы являются типами и могут определяться typedef'ом
- Пространства имен могут быть добавлены к; Вы можете добавить к нему функциональность в любое время и добавить к нему напрямую
- Классы не могут быть добавлены без создания нового производного класса
- Пространства имен могут иметь предварительные объявления
- С классами вы можете иметь частных и защищенных членов
- Классы могут использоваться с шаблонами
Точно, как делить:
"Проект состоит из 1 Гб источника
код. Итак, что является лучшей практикой для
разделить модули на пространствах имен в
C ++? "
Слишком субъективно говорить, как именно делить ваш код без точного исходного кода. Разделение на основе модулей, хотя звучит логично, но не весь продукт.