У меня есть (все еще) небольшой игровой движок на C ++, созданный с помощью Visual Studio.В игровом движке есть поддержка DirectX и OpenGL, но это не так важно.Важной частью является то, что у меня есть некоторые конкретные реализации абстрактных базовых классов (например, DXKernel и OGLKernel в качестве подклассов класса Kernel).Итак, классы DXKernel и OGLKernel имеют общий интерфейс с некоторым платформо-зависимым кодом.Класс Kernel действительно имеет некоторые собственные реализации, поэтому он не является чистым интерфейсом, и эти методы должны наследоваться реализациями.
Теперь, насколько я понимаю, лучше всего исключить конкретную реализацию из основной.проектировать и создавать статические библиотеки для связи с основным проектом, в зависимости от платформы, для которой я компилирую.Так что, если я собираюсь для OS X, я хочу включить только реализации OpenGL.Если я компилирую для Windows, я хочу включить обе реализации DirectX и OpenGL.
Макет Visual Studio теперь выглядит следующим образом:
Solution
Project
Header files
Core
DX
DXKernel.h <-- DirectX implementation of abstract methods
...
OGL
OGLKernel.h <-- OpenGL implementation of abstract methods
...
Kernel.h <-- abstract class(es)
...
...
Source files
Core
DX
DXKernel.cpp
...
OGL
OGLKernel.cpp
...
Kernel.cpp
...
...
Если я создаю новую статическую библиотекупроект в Visual Studio и скопировать определенные файлы в новую библиотеку, как я могу получить проект библиотеки для поиска общих заголовков (например, Kernel.h)?Должен ли я скопировать файлы заголовков основного проекта в библиотеку (это создает проблемы при обновлении заголовков)?Должен ли я изменить путь включения в проекте библиотеки?
Кажется, однако, что эта установка создает некую круговую зависимость между основным проектом и библиотеками, и, насколько я знаю, этого не должно быть.
Надеюсь, выможет помочь мне.