организация кода — Организация источника (C ++)

Для научного проекта у меня есть инструмент шаблонного анализа (модуль A), который использует тип статистического теста (модуль B). Инструмент анализа (модуль A) используется для решения двух типов задач (модули C и D). Модули C и D определяют функции для сериализации из разных типов файлов.

Все модули (A, B, C и D) используют общие утилиты (модуль E). Каждый модуль состоит из нескольких файлов. Я действительно хотел бы организовать модули так, чтобы у каждого было свое собственное пространство имен, и чтобы исходные файлы находились в разных каталогах (т.е. подчеркивали модульность в организации).

Тривиально определить пространство имен в каждом файле. Но я надеялся использовать какое-то дерево исходников, где файл #include для каждого модуля будет включать все остальные в своем собственном пространстве имен.

Я не совсем уверен, что это хороший способ организовать это. Должен ли я просто использовать одну папку на модуль и #include, используя относительные пути? Если каждый модуль имеет свой собственный репозиторий git и компилируется в один файл библиотеки, который находится в указанной папке UNIX (это потребует истинной установки для запуска проекта).

Сейчас я использую gcc-4.7, make и emacs.

Знаете ли вы, как организовать эти файлы, чтобы выявить модульность?

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

1

Решение

Но я надеялся использовать какое-то дерево исходников, где файл #include для каждого модуля будет включать все остальные в своем собственном пространстве имен.

Это неправильный подход. Даже если A зависит от E на уровне модуля, это не обязательно означает, что все компоненты внутри A зависят от всех компонентов внутри E, и вам не следует форсировать это через включения.

Включения должны быть явными (включать все, что вам действительно нужно) и точными (не включать ничего, от чего вы не зависите).

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]