Шаблон проектирования для реализации HAL в Stack Overflow

Есть ли у вас какие-либо предложения относительно шаблона проектирования или техники для реализации уровня аппаратной абстракции в C ++, чтобы я мог легко переключаться между платформами во время сборки? Я думал об использовании чего-то вроде шаблона моста, о котором я читал в шаблонах GoF или C ++, но я не уверен, что это лучший выбор.

1

Решение

Я думаю, что это не хороший выбор использования шаблона моста во время сборки.

Это мое решение:

Определите стандартный класс устройства в качестве интерфейса:

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
1

Другие решения

Для большего количества идей посмотрите ответы на этот вопрос:
Кроссплатформенный код C ++ и один заголовок — несколько реализаций

Я закончил с идиомой PIMPL, когда столкнулся с подобной проблемой.

0

По вопросам рекламы [email protected]