1

基本クラスの存在に依存する仮想関数の実装を支援するために使用できるイディオムはありますか? たとえば、私は

class B {/* some abstract interface. */};

class A
{
public:
  virtual B* getB() {return nullptr;}
};

class C : public A, public B
{
public:
  B* getB() override {return this;}

  /* Implement B's interface here.*/
};

そして、私は通常、このように実装したいと考えていますgetB-すべてのリーフクラスに対してこれを繰り返す必要を何とか回避できますか? Bのようなインターフェースクラスがいくつかある可能性があります。

それを行う 1 つの方法は、C と B の両方で実質的に A から継承することだとわかっていますが、可能であれば、B を A と無関係に保ちたいと考えています。

4

1 に答える 1

4

あなたはそれをすべてAで行うことができます:

class A
{
public:
    virtual B* getB() {return dynamic_cast<B*>(this);}
};

注:virtualここでは、クラス A をポリモーフィックにするためのものであり、この使用の要件ですdynamic_cast。をオーバーライドするつもりはありませんgetB()

于 2013-03-30T15:23:23.813 に答える