Хорошей практикой является не беспокоиться о вашей стратегии заголовка, пока она компилируется.
Раздел заголовка вашего кода - это просто блок строк, на который никто даже не должен смотреть, пока вы не получите легко решаемую ошибку компиляции. Я понимаю стремление к «правильному» стилю, но ни один из способов не может быть описан как правильный. Включение заголовка для каждого класса с большей вероятностью вызовет досадные ошибки компиляции на основе порядка, но эти ошибки компиляции также отражают проблемы, которые может исправить осторожное кодирование (хотя, возможно, они не стоят времени на исправление).
И да, у вас будут проблемы, связанные с порядком, как только вы начнете попадать на friend
землю.
Вы можете думать о проблеме в двух случаях.
Случай 1: у вас есть небольшое количество классов, взаимодействующих друг с другом, скажем, менее дюжины. Вы регулярно добавляете, удаляете и иным образом изменяете эти заголовки так, чтобы это могло повлиять на их зависимости друг от друга. Это тот случай, который предлагает ваш пример кода.
Набор заголовков достаточно мал, чтобы решить любые возникающие проблемы. Любые сложные проблемы решаются путем переписывания одного или двух заголовков. Беспокойство по поводу вашей стратегии заголовка - это решение проблем, которых не существует.
Случай 2: у вас есть десятки классов. Некоторые из классов представляют основу вашей программы, и перезапись их заголовков заставит вас переписать / перекомпилировать большое количество вашей кодовой базы. Другие классы используют эту основу для выполнения задач. Это представляет собой типичный бизнес-обстановку. Заголовки распределены по каталогам, и вы не можете реально вспомнить имена всех.
Решение: на этом этапе вам нужно думать о своих классах в логических группах и собирать эти группы в заголовки, которые мешают вам #include
снова и снова. Это не только упрощает жизнь, но и является необходимым шагом для использования преимуществ предварительно скомпилированных заголовков .
Вы заканчиваете #include
занятия, которые вам не нужны, но кого это волнует ?
В этом случае ваш код будет выглядеть так ...
#include <Graphics.hpp>
struct Entity {
Texture texture;
RenderObject render();
}