В настоящее время я программирую в Java и использую Знатока вполне немного. Как, таким образом, я стал, приучают к схемам именования и структурам папок, которые я использовал за прошлые 4 или 5 лет.
Поскольку я недавно начал изучать C++, я понимаю, что понятия не имею, куда поместить все мои файлы. Я должен сохранить все сломанным пространством имен, или тем, в каком уровне это находится? Где, например, я сохранил бы серию файлов посвященной UI, как соединено в файлы предназначенный, чтобы помочь хранить данные?
Есть ли какие-либо стандарты для этого вида вещи?
Очевидно, нет никакого категорического ответа на этот вопрос. Я просто ищу хорошее руководство. Я не хочу начинать изучать C++ путем проведения слишком большого количества времени, волнуясь о том, как размечаются мои файлы. Я имел бы некоторые хорошие модели и просто добрался бы до кодирования.
Следующее довольно типично ...
third-party library
release
obj
debug
obj
include
src
sublib 1
sublib 2
mylibrary
release
obj
debug
obj
include
src
sublib 1
sublib 2
myapp
release
obj
debug
obj
subapp 1
subapp 2
mylittleapp
release
obj
debug
obj
В основном подпапки для подпроектов являются обычными для больших проектов, но в большинстве случаев в конкретном проекте есть папки для src, include и т. Д. Папка для каждой сборки Конфигурация является обычным явлением, и рекомендуется хранить файлы obj и другие промежуточные файлы во вложенной папке. Может возникнуть соблазн поместить папки подпроектов в папки obj, но обычно в этом нет необходимости - папки obj не должны быть хорошо организованы, поэтому единственная проблема - конфликт имен файлов, и лучшее решение для этого - иметь уникальные имена исходных файлов. в рамках (как минимум) каждого проекта.
Папки "include" должны содержать IMO только заголовки, которые будут #included другими проектами - внутренние заголовки принадлежат папке "src".
Помещение элементов пользовательского интерфейса в отдельную папку - неплохая идея, если она достаточно большая. Я видел элементы пользовательского интерфейса, выполненные в виде отдельного проекта верхнего уровня со статической связью, и я имею в виду именно приложение, а не (например) wxWidgets. Однако обычно таким уровнем разделения является подпроект , если его вообще стоит разделять.То, как вы разделяете подпроекты, больше зависит от конкретных блоков приложения в целом, поэтому это зависит от того, лучше ли обрабатывать элементы пользовательского интерфейса как отдельный блок или как отдельные фрагменты, смешанные с логикой конкретной задачи.
Пространства имен - не самая используемая языковая функция, возможно потому, что многие люди так часто используют слово «использование», что они не имеют большого значения. Пространство имен для проекта основной библиотеки имеет смысл, но связывание подпапок с пространствами имен 1: 1 я не видел. Лично у меня есть пространство имен, которое охватывает большую часть кода моей библиотеки, с парой подпространств имен для вещей, которые редко используются в целом, но часто используются в нескольких местах (например, «побитовые» пространства имен). Подпространства имен ограничены одной парой источник / заголовок, поэтому подпапки не нужны. Большая часть выбора для конкретной библиотеки осуществляется путем включения правого заголовка - за исключением того, что я все равно обычно включаю лот через заголовок верхнего уровня основного проекта.
По сути, пространства имен - это способ избежать конфликтов имен. Они не обязательно связаны с абстракциями, функциональными блоками или чем-то еще. В рамках конкретного проекта вам, вероятно, лучше просто убедиться, что имена не конфликтуют. Как и в случае с пространством имен "std", можно поместить лот материала в одно пространство имен.
Однако, как вы говорите, это не окончательный ответ - конечно, есть незначительные вариации и совершенно разные подходы.
В небольших проектах моя команда группирует все файлы вместе с помощью модуля компоновки, то есть библиотеки, DLL, EXE. Если модуль очень большой, мы иногда будем разбивать файлы по функциональным модулям или подсистемам, так что, если вам нужно отредактировать компонент, они, как правило, находятся в одном месте.
Я разбиваю свои проекты по темам, один каталог для темы:
menu_planner
src
recipes
debug -- contains debug object files and libraries
release -- contains release object files and libraries
obsolete -- contains obsolete source files
ingredients
debug -- contains debug object files and libraries
release -- contains release object files and libraries
obsolete -- contains obsolete source files
references
debug -- contains debug object files and libraries
release -- contains release object files and libraries
obsolete -- contains obsolete source files
meals
debug -- contains debug object files and libraries
release -- contains release object files and libraries
obsolete -- contains obsolete source files
menus
debug -- contains debug object files and libraries
release -- contains release object files and libraries
obsolete -- contains obsolete source files
docs
designs
Мой опыт работы с C и C ++ показал мне, что файлы заголовков и source должны находиться в одном каталоге. Часто найти заголовочный файл труднее, если он не находится в том же каталоге, что и исходный файл.
Один каталог (папка) для каждой концепции - хорошая идея. Любое сложное или составное понятие следует разбить на несколько папок или понятий.
Я также научился создавать библиотеки. Я использую библиотеки для хранения кода, который не сильно меняется. Этап связывания выполняется быстрее с библиотеками, чем с каталогами объектных файлов.
Однако на рабочих местах (также известных как магазины) могут быть разные правила стиля, которым необходимо следовать.