void指针的虚方法表

时间:2017-05-09 16:44:24

标签: c++

给定一个指向类的void指针,如何在不转换为该类的情况下访问虚方法表和该类的函数?

class Thing{
    private:
        virtual int foo(){
            return 5;
        }

        virtual int bar(){
            return 4;
        }

    public:
        Thing(){
        }
}

Thing thing;
void *thing = &thing;
int getFoo(void* thing){
   //Code here to get virtual method table and call function

}

2 个答案:

答案 0 :(得分:1)

在便携式C ++中,您唯一能做的就是将其强制转换为原始类型。 (您还可以添加const限定符。)

您的编译器可能会记录vtable(如果使用vtable)如何从您拥有的指针获取,并且您可以使用它。但要强调的是,如果采取这种方式,你就没有编写可移植的C ++。

使用语言,而不是反对。

答案 1 :(得分:0)

  

如何在不转换为该类的情况下访问虚方法表和该类的函数?

C ++不提供此类功能。如果你确实需要,你可以使用特定的编译器/平台,研究并放置一个丑陋的黑客(使用偏移等)。但是你需要意识到,即使在不同版本的相同编译器中,这种“解决方案”也不可移植。