1

適切なクラスの静的メソッドを呼び出す仮想メソッドがあります。

class A{
public:
    static void bar() {std::cout<<"bar A\n";}
    virtual void foo(){
      //Some A work...
      bar();
    }
};

class B : public A{
public:
    static void bar() {std::cout<<"bar B\n";}
    virtual void foo() override {
       //Some B work...
       bar(); //prints bar B, as intended.
   }
};

しかし今、メソッド foo() を持つクラス C が必要ですが、最後に C::bar() を呼び出すという唯一の違いがあります。

class C : public A {
public:
    static void bar() override {std::cout<<"bar C\n";}
    virtual void foo(){
      //Some **A** work...
      bar(); //I want to print "bar C" here
    }
}

ただし、ここではメソッド A::foo 定義の完全なコピーを作成する必要がありました。`virtual void callStaticBar(){bar();} のようなダミーの仮想メソッドを導入して、クラス C で同じテキストでオーバーライドすることもできます。そのようなことを行うためのよりエレガントな方法はありますか?

4

1 に答える 1