您是否有任何关于在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. iOS设计模式实现
- 2. 设计模式的基础上,实现
- 3. STP MVP设计模式的实现
- 4. 设计模式的非编程“实现”
- 5. 设计模式的参考实现
- 6. 哪种设计模式适用于以下api实现?
- 7. 使用存储库和映射实现MVC设计模式,C#
- 8. 用于实现实用功能的角度良好设计模式
- 9. 实现访问者设计模式
- 10. 门面设计模式 - 实现
- 11. 实现Singleton设计模式[请建议]
- 12. 在PHP应用程序中实现插件的设计模式
- 13. C++设计模式问题。单接口多实现?
- 14. C++中的最佳OO设计实现?
- 15. 在Python中使用元类实现工厂设计模式
- 16. 在Spring应用程序中实现设计模式
- 17. 如何在JPA域模型中实现状态设计模式
- 18. 如何以通用形式实现NULL对象设计模式?
- 19. 使用类/方法的不同实现的设计模式
- 20. Ruby中实现的所有设计模式的备忘单?
- 21. 在PHP中实现的状态设计模式的资源?
- 22. 使用ReSharper创建实现特定设计模式的类
- 23. 增强现实应用的建筑设计模式
- 24. 在现实世界中的设计模式
- 25. 在NDB中实现位数据/操作符的设计模式
- 26. 在设计模式中实现与out msdtc的交易
- 27. 设计模式实例
- 28. 用于实现INotifyPropertyChanged的模式?
- 29. C#正确的方式来设计/实现此用户界面?
- 30. 嵌入式系统的设计/实现模式
如果无论如何你知道编译时的目标CPU,为什么诉诸动态多态?你从每一方都输了! –
同意!另外,SFINAE over #ifdef – Jeff
X86和ARM只是一个例子,你可以用PAX255,IT3354来代替它们。对于一个设备来说,不同平台的驱动程序的源代码除了一些关键点之外几乎与初始化过程相同。我可以将所有这些代码写入一个类或文件中的不同平台,但在代码维护@DavidHaim – netdigger