Ответ из учебника (возможно) может заключать в себе все вызовы, относящиеся к вашей платформе, и использовать эти функции-обертки по всему коду, а не для конкретной платформы. Таким образом, если вы можете сопоставить методы, которые вы используете один-к-одному на обеих платформах (возможно, легче сказать, чем сделать), то вы можете переключить, какая функция для конкретной платформы вызывается вашими функциями-обертками, и не изменять остальные логика в вашем коде.
Скажем, у вас есть:
void RenderBadGuy(int badGuyID)
{
// Windows-specific bad-guy rendering code here
}
На данный момент вы можете просто написать ("G_" для общего)
void G_RenderBadGuy(int badGuyID)
{
RenderBadGuy(badGuyID);
}
Это добавляет небольшую нагрузку на ваш движок, но это не должно ломать вещи, если они у вас есть (просто дополнительный вызов функции).
Теперь, в любом месте, где вы используете RenderBadGuy, просто используйте G_RenderBadGuy. Промойте и повторите все ваши методы, и теперь позже вы можете переключить свой код на что-то вроде
void G_RenderBadGuy(int badGuyID)
{
// now we're rendering on a Mac
RenderBadGuy_Mac(badGuyID);
}
и тогда ваш главный двигатель не изменится.
Вы, вероятно, можете сделать это намного лучше и обобщенно (указатели на функции, я не знаю), но это идея.
Или вы можете сделать что-то похожее на Java и поговорить с вашей библиотекой с модулем, который, в свою очередь, знает специфику вашей платформы. Просто разработайте разные модули (например, виртуальные машины) для каждой платформы, и вы создадите свою библиотеку только один раз.