Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
 Аватар для Rhoxolan
13 / 13 / 7
Регистрация: 16.12.2020
Сообщений: 247

Необходимость использования пространств имён

09.03.2022, 22:21. Показов 1550. Ответов 2

Студворк — интернет-сервис помощи студентам
Здравствуйте! Существуют ли какие-то общепринятые нормы использования пространств имён в рабочих проектах?


Приведу конкретные примеры, чтобы не ходить вокруг да около. Допустим, пишу проект, и в отдельный "MyHeader.h" собрал ряд функций, которые не привязаны к логике этого проекта и могут использоваться в других. Разумно ли будет поместить все функции данного заголовочного файла в пространство имён? Например, в тех же библиотеках C++ многие функции и так помещены в пространства имён - std::, std::filesystem, std::ranges и т.д. Так может стоит брать с этого пример?

Ну или, если за первый пример еще можно сказать, что "как удобно, так и делай", приведу пример поинтересней. Допустим, пишется проект не в ООП стиле, работая чисто с функциями, а не с объектами. И вполне логично будет отделить, например, функции для работы с файловой системой от функций для внутренней логики приложения. Так почему бы не отделить их пространствами имён?

В материалах по C++ для начинающих часто пишется, что пространства имён используются во избежание конфликта имён тогда, когда над проектом работают разные люди. А если работаешь один - можешь их не использовать. Но, как по-моему, я привел пару примеров, когда использование namespac-ов необходимо уже для архитектуры кода, а не только для избежания конфликтов.

Проясните, пожалуйста, ситуацию, какой подход является общепринятым в этом вопросе.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.03.2022, 22:21
Ответы с готовыми решениями:

Конфликт пространств имён
Есть у меня два разных класса, имеющими одно название. И есть другие две библиотеки, использующие эти классы (каждая свой). Я...

Ошибка пространств имен, что делать?
На скриншоте видно где ошибка. Что делать в данной ситуации? Мне нужно создать элемент вектора session в цикле. Просьба не писать...

Правильное разделение пространств имён на файлы
Здравствуйте! Подскажите пожалуйста, есть ли какие-то общепринятые правила разбиения на файлы классов и глобальных функций, созданных своём...

2
2395 / 1924 / 763
Регистрация: 27.07.2012
Сообщений: 5,569
09.03.2022, 22:47
Лучший ответ Сообщение было отмечено Rhoxolan как решение

Решение

Цитата Сообщение от Rhoxolan Посмотреть сообщение
Проясните, пожалуйста, ситуацию, какой подход является общепринятым в этом вопросе.
Да нет какого-то общепринятого подхода. Логично, конечно, какие-то вещи, которые могут использоваться в разных проектах, помещать в неймспейс. Это добавляет порядка. Но каких-то законов тут нет.

Добавлено через 5 минут
Ещё как пример использования пространств имён. При переезде с одной версии библиотеки на другую.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
namespace old_version
{
// тут старый добрый говнокод
}
 
namespace new_version
{
// тут лучшие образцы, не имеющие аналогов
}
 
#define ALL_DONE
 
#ifndef ALL_DONE
    namespace my_fucns = old_version;
#else
    namespace my_funcs = new_version;
#endif
 
using my_funcs::func1;
// ...
1
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
09.03.2022, 22:59
Лучший ответ Сообщение было отмечено Rhoxolan как решение

Решение

Цитата Сообщение от Rhoxolan Посмотреть сообщение
А если работаешь один - можешь их не использовать.
Лично я именно такого никогда и нигде не видел. Вы это сами наверное додумали?

Цитата Сообщение от Rhoxolan Посмотреть сообщение
во избежание конфликта имён тогда, когда над проектом работают разные люди.
Это одна из причин, но не единственная. Причем довольно малозначительная, потому что для контроля версий кода при работе в команде лучше использовать систему контроля версий, а не пространства имен.

Например, вы пишете библиотеку. Не важно один вы пишете ее или нет, но у библиотеки есть пользователи и они тоже пишут свои функции. И вот хорошо бы, чтобы эти функции были как-то защищены от пересечения с вашими, библиотечными. Поэтому в данной ситуации пространство имен сделает две вещи:
1) Определит через свое имя предметную область вашей библиотеки (например библиотека для геометрических вычислений может иметь пространство имен libgeom);
2) Сильно снизит вероятность пересечения пользовательских функций с библиотечными.

Отсюда понятно, что пространство имен - это одно из средств декомпозциии предметной области. Т.е. да, вот это
Цитата Сообщение от Rhoxolan Посмотреть сообщение
логично будет отделить, например, функции для работы с файловой системой от функций для внутренней логики приложения.
нормально вписывается в это. Но здесь важно не переборщить.

Цитата Сообщение от Rhoxolan Посмотреть сообщение
какой подход является общепринятым в этом вопросе.
Не уверен, что это вообще здесь применимо. В смысле "общепринятый подход" подразумевает какой-то шаблон действий. Но в программировании все упирается в задачу. И от задачи растут все подходы. Да, программер может знать какие-то паттерны, но их он применяет для решения задачи, а не ради того, чтобы просто применить (потому что так все делают).

Думаю, что достаточно понимать зачем нужна та или иная возможность языка, а уж как и насколько ее применять - это будет определяться вашей задачей и опытом. У вас все равно не получится сейчас просто получить руководство к действию и дальше всегда писать хороший код (те, кто на этом останавливаются, как правило всю оставшуюся жизнь пишут именно плохой - без кавычек - код). Хороший код у вас выйдет только после многих итераций написания "плохого" кода, с осознанием того, что в следующий раз вы сделаете что-то лучше.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.03.2022, 22:59
Помогаю со студенческими работами здесь

Использование string в многофайловом приложении. Необходимость подключения библиотек и пространства имён
Здравствуйте. Есть заголовочный и cpp файлы. В заголовочном пишу#ifndef MODEL_H #define MODEL_H struct Vertex { float x, y, z; ...

Необходимость использования виртуального деструктора в интерфейсном классе
Здравствуйте! Подскажите пожалуйста, необходимо ли прописывать в интерфейсном классе деструктор, даже если нет элементов, которые...

Нужны примеры использования пространства имён
Помогите пожалуйста , нужно сделать небольшую программку,самому придумать , но в голову ничего не лезет . Я в С++ новичок,но примерно...

Можно ли избавиться от использования пространства имен в коде?
int main() { X::var = 7; X::print(); using namespace Y; var = 9; print(); { using Z::var; using Z::print;

Реализовать программу, которая содержит объявления собственного пространства имен и его использования
Реализовать программу, которая содержит объявления собственного пространства имен и его использования. К файлу с кодом предыдущего...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита табличной части. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru