有没有办法获得函数成员的确切地址?例如我有:
struct foo
{
void print() { printf("bla bla bla"); }
};
//////////////////////////////////////////////////////////////
unsigned int address = foo::print;
您可以使用以下语法来声明指向成员函数的指针:
typedef void (foo::*address)();
address func = &foo::print;
为了调用非静态成员函数,您需要该类的现有实例:
(fooInstance.*func)();
我不确定您所说的“确切地址”是什么意思。当然没有办法将任何地址放入unsigned int
(小于我机器上的指针)中。就此而言,没有办法将指向函数的指针放在void*
. 同样,我使用了指向函数的指针大于void*
. 最后,没有办法将指向(非静态)成员函数的指针放入指向函数的指针中;指向成员函数的指针几乎总是更大。最后,给出:
void (MyClass::*pmf)();
MyClass* p;
(p->*pmf)();
可以调用不同的函数,具体取决于p
.
所以根本不清楚你在问什么。