从无效指针转换为基础对象调用派生类方法

时间:2014-03-14 05:51:53

标签: c++ inheritance void-pointers

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

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();
}

1 个答案:

答案 0 :(得分:3)

除了运气之外,除此之外别无选择。由于这是static_cast,因此必须在编译时知道转换。但是因为指针是void *,所以编译器无法知道指针需要如何转换为指向派生内部的实例。

相关问题