给定一个指向类的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
}
答案 0 :(得分:1)
在便携式C ++中,您唯一能做的就是将其强制转换为原始类型。 (您还可以添加const限定符。)
您的编译器可能会记录vtable(如果使用vtable)如何从您拥有的指针获取,并且您可以使用它。但要强调的是,如果采取这种方式,你就没有编写可移植的C ++。
使用语言,而不是反对。
答案 1 :(得分:0)
如何在不转换为该类的情况下访问虚方法表和该类的函数?
C ++不提供此类功能。如果你确实需要,你可以使用特定的编译器/平台,研究并放置一个丑陋的黑客(使用偏移等)。但是你需要意识到,即使在不同版本的相同编译器中,这种“解决方案”也不可移植。