【发布时间】:2011-12-28 14:39:00
【问题描述】:
如何获取 C++ 中成员函数的绝对地址? (我需要这个来思考。)
成员函数指针不起作用,因为我无法将它们转换为绝对地址(void *)——我需要知道内存中实际函数的地址,而不仅仅是相对于类型的地址。
【问题讨论】:
-
可能值得一提的是,这不仅适用于 Visual C++ 的标签,还可以避免忽略它们的人浪费时间在明显的答案上,“你不能”。
-
@thiton:假设 Mehrdad 想要的实际位置的函数恰好是一个虚函数。然后基类实现在可执行文件的某个地方仍然有一个入口点,但是该函数的指向成员的指针不会引用该入口点,因为通过它的调用使用虚拟机制。
-
@thiton:它没有那么简单。虚函数和多重继承增加了复杂性。
-
出于兴趣,为什么你需要地址来进行thunking?那就是:为什么不能只保留成员函数指针,因为无论如何都需要保留实例指针才能使用它?
-
@Omnifarious:我想你可能误解了这个问题?因为我不试图将指针“放入”
void *。相反,我试图获取成员函数的内存地址。不管我们是在谈论C函数还是一些虚拟菱形多重虚拟继承函数(或其他)的覆盖,都没有关系。仍然只有 1 个函数,它必须从内存中的某个位置开始,可以用void *表示。与传统成员函数指针有关的所有其他令人头疼的问题都是动态调度,我不需要。
标签: c++ visual-c++ memory-address member-functions