Я создаю игровой движок (на c ++), который разбит на несколько проектов (компиляция для разделения библиотек DLL и библиотек на окнах и общих объектов в Linux), структура выглядит следующим образом:
Main.exe
Engine.dll
Graphics Engine.dll Physics Engine.dll Sound Engine.dll ...dll
Main.exe инициализирует новый движок, а затем движок создает графические, физические и звуковые движки. Это все работает нормально, однако теперь я хочу, чтобы графический движок запускал функции, присутствующие в звуковом движке, но не напрямую, а через функцию в Engine.dll.
Однако есть проблема. Main включает в себя Engine, а Engine включает в себя графику, физику и звук. Если я сейчас скажу Графике, Физике и звуку включить Engine, а также передать ссылку на объект engine каждому соответствующему «подсистеме», то возникнет проблема с круговыми зависимостями ...
Как я мог заставить графический, физический и звуковой движок взаимодействовать с главным движком (поскольку на данный момент это только односторонние отношения, когда основной движок вызывает все функции вспомогательных движков)?