我们可以有一个静态的虚拟function? 如果不是,那么为什么?

可能重复:
C ++静态虚拟成员?

我们可以有一个静态的虚拟function? 如果不是,那么为什么?

class X { public: virtual static void fun(){} // Why we cant have static virtual function in C++? }; 

不,因为它在C ++中没有任何意义。

当你有一个指针/对一个类的实例的引用时,虚拟函数被调用。 静态函数不绑定到特定的实例,它们绑定到一个类。 C ++没有指向类的指针,所以没有可以虚拟调用静态函数的场景。

这是没有道理的。 虚拟成员函数的意义在于,它们是根据调用它们的对象实例的dynamictypes来调度的。 另一方面,静态函数不涉及任何实例,而是类的一个属性。 因此,他们是虚拟的是没有意义的。 如果你必须的话,你可以使用一个非静态调度器:

 struct Base { static void foo(Base & b) { /*...*/ } virtual ~Base() { } virtual void call_static() { foo(*this); /* or whatever */ } }; struct Derived : Base { static void bar(int a, bool b) { /* ... */ } virtual void call_static() { bar(12, false); } }; 

用法:

 Base & b = get_instance(); b.call_static(); // dispatched dynamically // Normal use of statics: Base::foo(b); Derived::bar(-8, true);