コードの再利用を最大化するために、抽象クラスとして実装しようとしているクラスがあります。ただし、2 つの派生クラスの共通点の大部分は、それぞれにコンシューマー スレッドとプロデューサー スレッドがあるという事実にあります。各静的メンバー関数に、基になるすべての作業を行う仮想メンバー関数を呼び出させることができるかどうか疑問に思っています。
基本的に、次のコードは許可されていますか、それとも私は非常にハックなことをしていますか、それともコンパイラは私に怒鳴ったり叫んだりしますか?
// in AbstractClass.h
class AbstractClass {
// some code here including constructors/destructors
protected:
virtual int Worker() = 0; // derived class provides implementation
private:
static void* Thread(void* args);
};
// in AbstractClass.cpp
static void* AbstractClass::Thread(void* args) {
AbstractClass myobject = static_cast<AbstractClass*>(args);
myobject->Worker();
}
基本的に、派生クラス「ワーカー」がこのように呼び出されるかどうか疑問に思っていますか? p_thread_create() は Thread() 関数を渡して呼び出されることに注意してください。
継承と仮想関数の理解と、それを使用してコードを最大限に再利用する方法を改善しようとしているので、助けてくれてありがとう.