C++ 中 HAL 实现的设计模式

Design pattern for HAL implementation in C++

您对在 C++ 中实现硬件抽象层的设计模式或技术有何建议,以便我可以在构建时轻松地在平台之间切换?我在考虑使用类似于我在 GoF 或 C++ 模板中读到的桥接模式,但我不确定这是否是最佳选择。

我认为在构建时使用桥接模式不是一个好的选择。

这是我的解决方案:

将标准设备class定义为接口:

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

有关更多想法,请参阅此问题的答案: Cross-Platform C++ code and single header - multiple implementations

当我遇到类似的问题时,我最终选择了 PIMPL 惯用法。