В настоящее время я занимаюсь разработкой довольно большой статической библиотеки, которая будет использоваться некоторыми инструментами, когда она будет завершена. Теперь, когда этот проект несколько больше, чем все, чем я занимался до сих пор, я понял, что пора подумать о хорошей структуре для проекта. Использование пространств имен - один из таких логических шагов.
Мой текущий подход состоит в том, чтобы разделить библиотеку на части (которые не являются автономными, но их цель требует такого разделения). У меня есть «основная» часть, которая теперь просто содержит некоторые очень общие определения типов и константы (используемые многими различными частями библиотеки). Другими частями являются, например, некоторые «утилиты» (хэш и т. Д.), Ввод-вывод файлов и так далее. Каждая из этих частей имеет собственное пространство имен. Я почти закончил «утилиты» и понял, что мой подход, вероятно, не самый лучший. Проблема (если мы хотим это так называть) в том, что в пространстве имен utils мне нужно что-то из пространства имен core, что приводит к включению файлов заголовков ядра и многих директив using.
Так что я начал думать, что это, наверное, нехорошо и нужно как-то менять. Моя первая идея - использовать вложенные пространства имен как что-то вроде core :: utils. Поскольку это потребует серьезного рефакторинга, я хочу сначала спросить здесь. Что вы думаете? Как бы вы с этим справились? Или в более общем плане: как правильно спроектировать статическую библиотеку с точки зрения пространств имен и организации кода? Если есть какие-то рекомендации или статьи по этому поводу, пожалуйста, прочтите их тоже. Спасибо.
Примечание: я совершенно уверен, что хороших подходов больше, чем один. Не стесняйтесь размещать свои идеи, предложения и т. Д. Поскольку я разрабатываю эту библиотеку, я хочу, чтобы она была действительно хорошей. Наша цель - сделать его максимально чистым и БЫСТРЫМ. Единственная проблема в том, что мне придется интегрировать МНОГО существующего кода и реорганизовать его, что действительно будет болезненным процессом (вздох) - вот почему хорошая структура так важна)