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

c++ calling static function from virtual function

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class A{
public:
    static void bar() {std::cout<<"bar A
"
;}
    virtual void foo(){
      //Some A work...
      bar();
    }
};

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

但现在我想用方法foo()获得类C,最后调用c::bar()的唯一区别是:

1
2
3
4
5
6
7
8
9
class C : public A {
public:
    static void bar() override {std::cout<<"bar C
"
;}
    virtual void foo(){
      //Some **A** work...
      bar(); //I want to print"bar C" here
    }
}

但是,这里我需要对方法A::foo定义进行完整复制。我还可以引入类似"virtual void callstaticbar()bar();"的虚拟方法,并在类C中用相同的文本重写它。有没有更优雅的方式来做这样的事情?


不,如果没有定义C::foo(),那么在C实例上调用foo()实际上会调用A::foo();由于A类不知道C类(vtable的情况除外),所以A::foo()无法调用C::bar(),而不管原来的调用来自C。]实例。

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