【发布时间】:2016-05-04 00:25:02
【问题描述】:
class foo{
public:
int n;
private:
virtual void sayHi(){
cout<<"Hi there!";
}
};
如何获取sayHi()的地址??
main(){
foo f;
typedef void(*fptr)();
fptr func = reinterpret_cast<fptr>((&f)[0]);
(*func)();
}
上面的代码不起作用。
我知道“f”对象的前 8 个字节是指向虚拟表的指针,其中包含指向函数的指针,我使用的是 64 位机器。我基本上是试图通过它的指针调用 sayHi(),而不是直接从 f 调用它,因为 sayHi() 无论如何都是私有的!我该怎么做?我分配对了吗?
【问题讨论】:
-
@Noor Thabit: 呃...在“标准 C++”中无法做到这样。标准 C++ 甚至没有“虚拟表”的概念。
-
您确定您不是在寻找pointer to member?
-
@NoorThabit:作为一个成员函数,你不能不通过指针“直接调用它”。它有一个隐含的“this”参数,至少需要一个值(尽管您可以将它传递给
nullptr)。但正如 immibis 所说,作为成员,您需要一个指向成员的指针。 -
@RyanHaining 不加好友,功能是私有的!
-
@NoorThabit 那么你将不得不使用我在上一条评论中链接的那个模板 runaround。不过,您在这里的问题的标题与您实际提出的问题完全不同。
标签: c++ pointers casting virtual-functions