c++:我们能有一个静态虚函数吗?如果没有,为什么?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
C++ static virtual members?

我们能有一个静态虚函数吗?如果没有,为什么?

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


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

当您拥有指向类实例的指针/引用时,将调用虚函数。静态函数不绑定到特定的实例,而是绑定到类。c++没有指向类的指针,因此不存在可以实际调用静态函数的场景。


这没有任何意义。虚成员函数的要点是,它们是根据调用它们的对象实例的动态类型来分派的。另一方面,静态函数不与任何实例相关,而是类的属性。因此,它们是虚拟的毫无意义。如果你必须,你可以使用非静态调度器:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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); }
};

用法:

1
2
3
4
5
6
Base & b = get_instance();
b.call_static();   // dispatched dynamically

// Normal use of statics:
Base::foo(b);
Derived::bar(-8, true);