Когда у нас есть какое-либо практическое применение иерархическим пространствам имен в C++?

Я могу понять использование одного уровня пространств имен. Но 3 уровня пространств имен. Выглядит безумно. Есть ли в этом практическая польза? Или это просто заблуждение?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
0
1 477
9
Перейти к ответу Данный вопрос помечен как решенный

Ответы 9

Это понадобится для больших кодовых баз. Взгляните на boost для примера. Я не думаю, что кто-то назвал бы код ускорения «безумным».

Если учесть тот факт, что на любом уровне иерархии люди могут понять только примерно 10 пунктов, то два уровня дают вам максимум 100. Достаточно большому проекту потребуется больше, поэтому он легко может оказаться на трех уровнях.

Я люблю Boost, но это определенно безумие (в хорошем смысле!) Но представьте, как бы это выглядело без пространств имен!

jwfearn 23.09.2008 00:00

Очевидно, это вопрос мнения. Но на самом деле все сводится к организации. Например, у меня есть проект, в котором есть плагин api с функциями / объектами, которые выглядят примерно так:

plugins::v1::function

Когда будет выпущена версия 2.0, они будут помещены в подпространство имен v2. Я планирую только отказаться от рекомендаций, но никогда не удалять элементы v1, которые должны хорошо поддерживать обратную совместимость в будущем. Это всего лишь один пример «разумного» использования. Я полагаю, что некоторые люди будут отличаться, но, как я уже сказал, это вопрос мнения.

Я работаю над приложением XXX в своей компании yyy, и я пишу подсистему GUI. Поэтому я использую yyy :: xxx :: gui в качестве пространства имен.

Ответ принят как подходящий

Иерархические пространства имен действительно используются в том, что они позволяют постепенно уточнять определения. Конечно, один поставщик может создавать два класса с одним и тем же именем. Часто первый уровень занимает название компании, второй определяет продукт, третий (и, возможно, больше) я предоставляю домен.

Есть и другие варианты использования разделения пространства имен. Одна из популярных ситуаций - размещение базовых классов для шаблона фабрики в его собственном пространстве имен, а затем производные фабрики в их собственных пространствах имен по поставщику. Например. System.Data, System.Data.SqlClient и System.Data.OleDbClient.

оо .. Я забыл, как был структурирован C#. Тогда это имеет смысл. Это неплохо. Спасибо.

Flinkman 22.09.2008 23:59

Это зависит от ваших потребностей и стиля программирования. Но одно из преимуществ namespace - помочь разделить пространство имен (отсюда и название). При использовании единого пространства имен по мере увеличения размера и сложности вашего проекта увеличивается вероятность конфликта имен.

Если вы пишете код, предназначенный для совместного использования или повторного использования, это становится еще более важным.

Вы легко можете оказаться в ситуации, когда вам потребуется более одного уровня. Например, у вашей компании есть гигантское пространство имен для всего своего кода, чтобы отделить его от стороннего кода, и вы пишете библиотеку, которую хотите поместить в собственное пространство имен. Как правило, если у вас очень большая и сложная система с иерархической структурой, разумно использовать несколько уровней пространства имен.

Согласен на заявки. Большинство людей, использующих несколько уровней пространств имен (по моему опыту), пришли из фона Java или .NET, где шум значительно меньше. Я считаю, что хорошие префиксы классов могут заменять несколько уровней пространств имен.

Но я видел хорошее использование нескольких уровней пространства имен в boost (и других библиотеках). Все находится в пространстве имен boost, но библиотекам разрешено (рекомендуется?) Находиться в собственном пространстве имен. Например - пространство имен boost :: this_thread. Это позволяет такие вещи, как ...

boost::this_thread::get_id()
boost::this_thread::interruption_requested()

this_thread - это просто пространство имен для набора бесплатных функций. Вы можете сделать то же самое с классом и статическими функциями (то есть способом определения свободной функции в Java), но зачем делать что-то неестественное, если в языке есть естественный способ сделать это?

Достаточно взглянуть на библиотеку базовых классов .Net, чтобы увидеть, как иерархия пространств имен находит хорошее применение. В некоторых местах он проходит на четыре или пять уровней, но в основном это всего два или три уровня, и организация очень хороша для поиска вещей.

Чем больше кодовая база, тем больше потребность в иерархических пространствах имен. По мере того, как ваш проект становится все больше и больше, вы обнаружите, что вам нужно разбить его на части, чтобы упростить поиск материала.

Например, в настоящее время мы используем двухуровневую иерархию. Однако некоторые из самых больших частей, о которых мы сейчас говорим, разбивают их на 3 уровня.

Другие вопросы по теме