您是否有任何关于在C++中实现硬件抽象层的设计模式或技术的建议,以便我可以在构建时轻松切换平台?我正在考虑使用类似我在GoF或C++模板中阅读的桥模式,但我不确定这是否是最佳选择。C++中用于HAL实现的设计模式
0
A
回答
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
使用t HESE设备:
#ifdef X86
Device* dev = new X86Device();
#elif ARM
Device* dev = new ARMDevice();
#endif
编译选项:
$ g++ -DARM ... // using ArmDevice
$ g++ -DX86 ... // using X86Device
0
更多的想法,看到这个问题的答案: Cross-Platform C++ code and single header - multiple implementations
我结束了PIMPL方法去时,我遇到了类似的问题。
相关问题
- 1. C++中的设计模式(GoF模式)实现
- 2. iOS设计模式实现
- 3. 通用设计模式实现建议
- 4. 适用于类似Web服务实现的设计模式
- 5. 实现静态方法C#中的命令设计模式
- 6. ReentrantLock外观设计模式的实现?
- 7. Backbone.js的工厂设计模式实现
- 8. 实现LastUpdated和UpdatedBy的设计模式
- 9. 设计模式的基础上,实现
- 10. 设计模式的参考实现
- 11. STP MVP设计模式的实现
- 12. 设计模式的非编程“实现”
- 13. 哪种设计模式适用于以下api实现?
- 14. 将行为添加到现有实现 - C#/设计模式
- 15. 使用存储库和映射实现MVC设计模式,C#
- 16. 如何在C#中实现工厂设计模式#
- 17. 用于实现实用功能的角度良好设计模式
- 18. 流水线设计模式实现
- 19. 实现访问者设计模式
- 20. 单例设计模式实现
- 21. 抽象设计模式实现
- 22. 实现Singleton设计模式[请建议]
- 23. 门面设计模式 - 实现
- 24. 如何更好地实现我的C++设计模式?
- 25. 在Jersey中使用HAL实现HATEOAS
- 26. 在PHP应用程序中实现插件的设计模式
- 27. C++设计模式
- 28. 务实的设计模式
- 29. C++设计模式问题。单接口多实现?
- 30. 实现一个user_controller用于模型用户的设计?
如果无论如何你知道编译时的目标CPU,为什么诉诸动态多态?你从每一方都输了! –
同意!另外,SFINAE over #ifdef – Jeff
X86和ARM只是一个例子,你可以用PAX255,IT3354来代替它们。对于一个设备来说,不同平台的驱动程序的源代码除了一些关键点之外几乎与初始化过程相同。我可以将所有这些代码写入一个类或文件中的不同平台,但在代码维护@DavidHaim – netdigger