0

コードの再利用を最大化するために、抽象クラスとして実装しようとしているクラスがあります。ただし、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() 関数を渡して呼び出されることに注意してください。

継承と仮想関数の理解と、それを使用してコードを最大限に再利用する方法を改善しようとしているので、助けてくれてありがとう.

4

1 に答える 1