MoonStone, не нужно уродовать классы макросами.
В движке вы подключаете файл platform.h
Который подключает весь платформозависимый стафф.
К движку подключаются обычные классы (без всяких макросов), у которых для всех платформ одни и те же имена самих классов и методов.
А вот реализация нигде наружу не торчит.
Таким образом все платформо-зависимое скрыто внутри платформо-зависимых классов.
Фактически, это тоже самое, как если бы вы настроили систему сборки так, что бы для разных платформ был разный состав файлов. Только это будет сделано препроцессором с++, а не системой сборки конкретной ИДЕ.
Kartonagnick, спасибо! Да, на данный момент я уже избавился от платформозависимых дефайнов внутри кода.
По сути, предложенный вариант - это второй вариант из нулевого поста, как раз (просто я там с его описанием перемудрил).
Но в нём мне не хватало возможности запилить комбинированные классы (кроссплатформ + платформспецифик методы в одном классе), да без копипасты одинакового функционала (ведь нельзя же просто банально обернуть все низкоуровневые функции - иногда даже их наборы в целом совершенно разные и все эти наборы хочется грамотно разложить по классам).
Поэтому я уже позарился на третий вариант, описанный в посте #29.
В нём, выходит, можно делать и комбинированные классы, причём можно наследоваться и от кроссплатформа, дописав туда платформозависимый код, а если прижмёт, то и наоборот тоже: наследоваться от платформозависимого класса и впаять туда какой-то общий код (навряд ли такое понадобится, конечно, но наличие возможности успокаивает :-) ).
Только переиначил немного макросики до такого вида:
#define CAT_0(a, b) a##b #define CAT( a, b) CAT_0( a, b) #define CAT_ENGINE_PLATFORM( a) CAT( a, ENGINE_PLATFORM) #define DECLARE_CROSSPLATFORM_CLASS( c) class c : public CAT_ENGINE_PLATFORM( c) {} #define ENGINE_PLATFORM _OSX DECLARE_CROSSPLATFORM_CLASS( CEngineGUIWindow); // Получаем запись формата "class CEngineGUIWindow : public CEngineGUIWindow_OSX {};"
Таки подумал насчёт такого завёрнутого наследования и решил, что в уж моих-то масштабах, да в тех местах, где это требуется, выполнение этого кода всяко не доставит беспокойства.
Тема в архиве.