c ++从虚函数调用静态函数

c++ calling static function from virtual function

我有调用适当静态方法的虚方法class:

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.
   }
};

但现在我想要 class C,使用方法 foo(),最后调用 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();} 并在 class C 中使用相同的文本覆盖它。有没有更优雅的方式来做这样的事情?

没有。如果未定义 C::foo(),在 C 实例上调用 foo() 将真正调用 A::foo();因为 class A 不知道 class C (除了 vtable 的那些情况),所以 A::foo() 没有办法调用 C::bar(),不管原始调用来自 C 个实例。

您需要使用虚拟虚方法或告诉我们更多您想要实现的目标,因为在特定情况下它们可能是更好的解决方案。