Вы можете структурировать программу на С++, чтобы (почти) весь код находился в файлах заголовков. Он по сути выглядит как С# или Java-программа. Тем не менее, вам нужен хотя бы один .cpp
файл, чтобы вытащить все файлы заголовков при компиляции. Теперь я знаю, что некоторые люди будут абсолютно ненавидеть эту идею. Но я не нашел убедительных недостатков в этом. Я могу указать некоторые преимущества:
[1] Более быстрое время компиляции. Все файлы заголовков обрабатываются только один раз, потому что есть только один .cpp файл. Кроме того, один заголовочный файл не может быть включен более одного раза, иначе вы получите разрыв сборки. Существуют другие способы достижения более быстрого компиляции при использовании альтернативного подхода, но это так просто.
[2] Он избегает круговых зависимостей, делая их абсолютно ясными. Если ClassA
в ClassA.h
имеет круговую зависимость от ClassB
в ClassB.h
, я должен поставить переднюю ссылку, и она торчит. (Обратите внимание, что это не похоже на С# и Java, где компилятор автоматически разрешает круговые зависимости, что поощряет неправильные методы кодирования IMO). Опять же, вы можете избежать круговых зависимостей, если ваш код находился в файлах .cpp
, но в реальном проекте файлы .cpp
имеют тенденцию включать случайные заголовки, пока вы не сможете определить, кто зависит от кого.
Ваши мысли?