最近、私は Thread クラス ライブラリを設計しており、次のような Thread 抽象クラスを作成しました。
class Thread {
public:
run() { /*start the thread*/ }
kill() { /*stop the thread*/ }
protected:
virtual int doOperation(unsigned int, void *) = 0;
};
実際のスレッド クラスは、この抽象クラスを継承doOperation
し、独自のロジックでメソッドを実装します。これはStrategy Patternに似ています。
問題は、次の関数でスレッドの実行を定義する C バックエンド ライブラリに依存していることです。
int startThread(char* name, (int)(*)(unsigned int, void*), int, int, int, void*);
ご覧のように; 2 番目のパラメーターは、スレッドのループ (メイン関数) への関数ポインターであり、ここに問題があります。この C 関数を使用してrun
メソッド内のスレッドを開始するため、アドレスをdoOperation
2 番目のパラメーターに渡しますが、型が一致しないため、これを行うことができません。
ポインターを返すために使用しようとしましたreinterpret_cast
が、ISO-C++ は、初期化されていない関数メンバーのポインターを返すことを禁止しています。この競合を克服する方法がわかりません。静的メソッドを使用することが唯一の解決策だと思いますが、それは私の設計パターンを爆破します!