Доброю практикою є не турбуватися про стратегію заголовка, поки вона складається.
Розділ заголовка вашого коду - це лише блок рядків, на який ніхто навіть не повинен дивитися, поки не з’явиться легко вирішена помилка компіляції. Я розумію прагнення до «правильного» стилю, але жоден спосіб насправді не можна охарактеризувати як правильний. Включення заголовка для кожного класу, швидше за все, спричинить дратівливі помилки компіляції на основі замовлень, але ці помилки компіляції також відображають проблеми, які ретельне кодування може усунути (хоча, певно, вони не варті часу на виправлення).
І так, ви будете мати ці проблеми порядку на основі , як тільки ви почнете отримувати в friend
землю.
Про проблему можна думати у двох випадках.
Випадок 1: Ви маєте невелику кількість занять, які взаємодіють між собою, скажімо, менше десятка. Ви регулярно додаєте, видаляєте та іншим чином змінюєте ці заголовки таким чином, що може впливати на їх залежність один від одного. Це той випадок, який пропонує ваш приклад коду.
Набір заголовків досить малий, щоб вирішити будь-які проблеми, що виникають, не складно. Будь-які складні проблеми вирішуються шляхом перезапису одного чи двох заголовків. Турбуватися про стратегію заголовка - це вирішення проблем, яких не існує.
Випадок 2: У вас десятки класів. Деякі класи представляють основу вашої програми, і перезапис їх заголовків змусить вас переписати / перекомпілювати велику кількість кодової бази. Інші класи використовують цю основу для досягнення справ. Це являє собою типовий бізнес-параметр. Заголовки розкинуті по каталогах, і ви не можете реально запам'ятати назви всього.
Рішення: На цьому етапі вам потрібно подумати про свої заняття в логічних групах і зібрати ті групи в заголовки, які не дозволять вам #include
переробляти знову і знову. Це не лише робить життя простішим, але й необхідним кроком до використання попередньо складених заголовків .
Ти закінчишся #include
заняття, які вам не потрібні, але кого це хвилює ?
У цьому випадку ваш код виглядатиме як ...
#include <Graphics.hpp>
struct Entity {
Texture texture;
RenderObject render();
}