適切なクラスの静的メソッドを呼び出す仮想メソッドがあります。
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 で同じテキストでオーバーライドすることもできます。そのようなことを行うためのよりエレガントな方法はありますか?