C++ の基本的な知識しかありません。C++ でハードウェア アブストラクション レイヤー (HAL) を実装しようとしています。この Data というクラスを実装したいとします。プラットフォームに基づいて、データを有線または無線で送信できます。
class Data() {
public Data() {
//create random data
}
public sendData() {
// send data
}
public platform_action1() {
// do some platform specific action
}
}
// My HAL
int HAL() {
Data myData;
myData.platform_action1();
myData.sendData();
return 0;
}
有線と無線の 2 つのプラットフォームがある場合、このクラスを拡張してファイルを整理し、HAL()
変更されないようにする方法を教えてください。
また、動的バインディング、つまりキーワード「virtual」を使用したくありません。私の場合、プラットフォームはコンパイル時に認識されます。
// 私はこれをしたくありません:) ...
int HAL() {
Data* data = new WiredData();
data.sendData();
data = new WirelessData();
data.sendData();
}
私の場合、プラットフォームはコンパイル時に認識されます。
C の世界から来て、これはプラットフォーム固有の関数ポインターを埋めるのと同じくらい簡単な作業です。
Boost C++ API の「スレッド」クラスを例にとります。このクラスは、プラットフォームに基づいて Windows スレッド API または Linux スレッド API のいずれかを呼び出して、スレッドを自動的に生成します。このようにして、私の HAL は完全にプラットフォームに依存しません。
- ありがとうクリス