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
は、インターフェースなどの標準的なデバイスクラスを定義します。
この
は私のソリューションです。HESEデバイス:
#ifdef X86
Device* dev = new X86Device();
#elif ARM
Device* dev = new ARMDevice();
#endif
コンパイルオプション:より多くのアイデアについては
$ g++ -DARM ... // using ArmDevice
$ g++ -DX86 ... // using X86Device
0
、この質問への回答を参照してください。私は同様の問題に直面したとき、私はPIMPLイディオムと一緒に行くことになった Cross-Platform C++ code and single header - multiple implementations
。
コンパイル時にターゲットCPUが分かっているのであれば、どうして動的ポリポルフィズムに訴えるのでしょうか?あなたはあらゆる面から失う! –
合意!さらに、#ifdef – Jeff
X86とARM上のSFINAEは単なる例ですが、これらはPAX255、IT3354と置き換えることができます。デバイスには、異なるプラットフォームのドライバのソースコードは、初期プロセスと同じような重要な点を除いてほぼ同じです。私はこれらのコードをすべてクラスやファイルで別々のプラットフォームに書くことができますが、コードメンテナンスの面では良い選択ではありません@DavidHaim – netdigger