Я думаю, что ваше базовое предположение неверно.
Другие ваши заголовки обычно организованы путем объединения того, что работает вместе.Например, класс и связанные с ним методы или два класса тесно связаны между собой.
Зачем группировать все константы в один заголовок?Это не имеет смысла.Идея заголовка "global.h"
так же плоха, как легко включить каждую отдельную зависимость.
В общем случае константы используются в определенном контексте.Например, перечисление, используемое в качестве флага для конкретной функции:
class File {
public:
enum class Mode {
Read,
Write,
Append
};
File(std::string const& filename, Mode mode);
// ...
};
В этом случае вполне естественно, что эти константы живут в том же заголовке, что и класс, с которым они связаны (и даже внутрикласс).
Другая категория констант - это те, которые просто пронизывают все приложение.Например:
enum class Direction {
Up,
Down,
Right,
Left,
Forward,
Backward
};
... в игре, в которой вы хотите выразить движение объектов относительно направления, в котором они стоят.
В этом случае создается один заголовочный файл для этого конкретногонабор констант в порядке.
И если вы действительно беспокоитесь о группировании этих файлов:
constants/
Direction.hpp
Sandwich.hpp
State.hpp
И вы аккуратно обойдете проблему перекомпиляции всего приложения при добавлении константы... хотя, если вам нужно, сделайте это, вы платите только один раз, лучше, чем неправильный дизайн, с которым вам придется жить до конца своей работы.