您是否有任何關於在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