У каждого ли исходника должен быть свой уникальный хедер?
У каждого ли .cc (кроме тестов или исходника с main()) должен быть свой уникальный .h?
Под словом должен имею в виду хорошая ли это практика или нет.
Возможна ли следующая структура проекта вместо уникального хедера для исходников?
project/
├── include/
│ ├── logger.h # Общий хедер для работы с логами
├── src/
│ ├── logger_info.cc
│ ├── logger_error.cc
│ ├── logger_debug.cc
│ ├── main.cc
Ответы (2 шт):
Можно без хедеров вообще писать код.
Можно в одном файле.
Можно весь код в хедерах писать, а в мейне только инклуд один оставить.
Можно расширение файлов не .cpp а другим сделать .cc , .c++ и.т.д.
Можно хедеры ложить не рядом с файлом, а в совершенно другом месте.
В плюсах можно ещё много чего, но без веской причины от стандартного вида лучше не отходить.
Тут вопрос в понимании зачем нужны заголовочные файлы (хедеры). Туда обычно выносятся типы данных, прототипы классов и т.д.
По моему мнению это не случайно: для того чтобы обозначить интерфейс программного модуля (который выполняет законченную функцию). Особенно если типы этого модуля, и/или функции, объекты, используются по иерархии проекта в каких-то других модулях. Удобно же открыть заголовочный файл модуля и увидеть там весь его экспортируемый функционал, желательно с комментами, согласитесь!
Выводы:
как писали выше, технически
В плюсах можно ещё много чего
но ИМХО проект совершеннее когда он лучше структурирован.
В книге Страуструпа "Язык программирования С++" подробно на эту тему расписано если что, в сочетании с пояснением принципа раздельной компиляции.
Опять же, для простого проекта, как ваш, такая структура вполне годной выглядит.