У меня есть следующая структура папок в 2D-игре в стиле Terraria / Minecraft:
src/
- Backend/
- - Vector.hpp
- World/
- - Elements/
- - - Mobs/
- - - - BaseMob.cpp
Как вы могли догадаться, в каждом каталоге есть еще много исходных файлов. внутри BaseMob.cpp
Мне нужен доступ src/Backend/Vector.hpp
, Есть ли более чистый способ написать #include "../../../Backend/Vector.hpp"
(То есть. #include "/Backend/Vector.hpp"
) или лучший способ организовать файлы в моей исходной папке?
Вот еще немного информации о фактическом содержании в исходных папках (большинство .cpp
файлы исключены):
Backend/ # Anything specific to a particular platform
- Vector.hpp
- Graphics.hpp
World/ # Anything about the whole game's world
- Elements/
- - Mobs/
- - - BaseMob.hpp # Polymorphic base class
- - - MobHandler.hpp # Manages all mobs in world
- - - PlayerMob.hpp
- - - WaterMob.hpp
- - Block.hpp # Defines all possible blocks
- - Inventory.hpp
- - Furnace.hpp
- World.hpp
- WorldRenderer.hpp # Makes calls to Backend/graphics.hpp
main.cpp
Вы могли бы рассмотреть реорганизацию ваших включаемых папок. Это возможное решение, но оно может быть недостаточным: вы не сможете сделать это, когда начнете использовать сторонние библиотеки … поэтому вам нужен лучший способ это исправить.
Чистым способом является добавление необходимых папок (той, в которой хранятся нужные вам заголовочные файлы) к вашему «пути включения», используемому компилятором, чтобы он мог их найти.
Тогда вместо #include "World/Elements/Mobs/BaseMob.hpp"
, вы добавляете World/Elements/Mobs
включить пути, а затем просто сделать #include "BaseMob.hpp"
Если вы используете другой компилятор / IDE, он должен предоставить возможность сделать это.
Я рекомендую воздерживаться от размещения путей в операторах #include. Если файл перемещается, вам придется изменить все источники.
IMO, лучший способ — сообщить компилятору, где искать включаемые файлы. Типичная опция компилятора командной строки — «-I» (заглавная буква i). В IDE может быть настройка, в которой вы можете перечислить все пути для поиска.
Сообщая компилятору, где искать, вы включаете файлы в любое место и можете перемещаться, и вам не нужно менять исходный код.