关于c ++:从Void Pointer转换为基础对象调用派生类方法

Calling a Derived Class method from a Void Pointer cast to a Base Object

我想从空指针调用派生类中的重写方法。这在运行时失败,因为调用了虚拟基::foo()方法,而不是派生的::foo()。相关代码就是这样工作的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Class Base  
{  
public:  
    Base();  
    virtual void foo() = 0;
}

Class Derived: public Base
{
public:
    Derived();
    void foo();
}

int main()
{
    Derived* dv = new Derived();
    void* ptr = dv;

    static_cast<Base*>(ptr)->foo();
}


除非运气好,否则这是行不通的。因为这是一个static_cast,所以必须在编译时知道转换。但是,由于指针是一个void *,编译器无法知道如何将指针转换为指向派生的基的实例。