Jos*_*phH 1 c++ architecture x86 gcc visual-c++
class Foo{
public:
void Bar();
}
Run Code Online (Sandbox Code Playgroud)
它不必是安全的,我不关心this指针.我只需要获取位于x86内存中的Bar函数的地址
void *address = (void *)&(Foo::Bar) 不起作用.
void *address = (void *)(&Foo::Bar) 不起作用.
void *address = (void *)Foo::Bar 不起作用.
编辑:让我澄清一下.即使理论上将函数指针强制转换为对象也是非法的,因为函数可能位于另一个存储空间中,实际上它们是相同的.正如我前面提到的,它既不安全,也不合法.我在问题中添加了x86标签.它只需要在x86架构上使用gcc和MSVC.
你没有,你不能.指针到成员函数不是指针(对象,即它们不适T*用于任何类型T).它们不一定,甚至实际上也不适合void*.
你唯一知道的void*是它足以容纳任何对象指针.而已.它甚至与普通的自由函数指针无关.在紧急情况下,您可以将void指针的自由函数模拟定义为typedef void(*voidf)();,但这仅适用于自由函数.对于指向成员的函数,没有一般性的东西,因为PTMF的精确实现取决于类的性质(简单,多态,虚拟派生,......).