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 惯用法。
您对在 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 惯用法。