Есть ли у вас какие-либо предложения относительно шаблона проектирования или техники для реализации уровня аппаратной абстракции в C ++, чтобы я мог легко переключаться между платформами во время сборки? Я думал об использовании чего-то вроде шаблона моста, о котором я читал в шаблонах GoF или C ++, но я не уверен, что это лучший выбор.
Я думаю, что это не хороший выбор использования шаблона моста во время сборки.
Это мое решение:
Определите стандартный класс устройства в качестве интерфейса:
class Device {
... // Common functions
};
Для платформы X86:
#ifdef X86 // X86 just is an example, user should find the platform define.
class X86Device: public Device{
... // special code for X86 platform
};
#endif
Для платформы ARM:
#ifdef ARM // ARM just is an example, user should find the platform define.
class ARMDevice: public Device {
... // Special code for ARM platform
};
#endif
Используя эти устройства:
#ifdef X86
Device* dev = new X86Device();
#elif ARM
Device* dev = new ARMDevice();
#endif
Вариант компиляции:
$ g++ -DARM ... // using ArmDevice
$ g++ -DX86 ... // using X86Device
Для большего количества идей посмотрите ответы на этот вопрос:
Кроссплатформенный код C ++ и один заголовок — несколько реализаций
Я закончил с идиомой PIMPL, когда столкнулся с подобной проблемой.