2

有没有办法获得函数成员的确切地址?例如我有:

struct foo
{
    void print() { printf("bla bla bla"); }
};
//////////////////////////////////////////////////////////////
unsigned int address = foo::print;
4

2 回答 2

2

您可以使用以下语法来声明指向成员函数的指针:

typedef void (foo::*address)();
address func = &foo::print;

为了调用非静态成员函数,您需要该类的现有实例:

(fooInstance.*func)();
于 2013-01-29T08:24:38.877 回答
1

我不确定您所说的“确切地址”是什么意思。当然没有办法将任何地址放入unsigned int (小于我机器上的指针)中。就此而言,没有办法将指向函数的指针放在void*. 同样,我使用了指向函数的指针大于void*. 最后,没有办法将指向(非静态)成员函数的指针放入指向函数的指针中;指向成员函数的指针几乎总是更大。最后,给出:

void (MyClass::*pmf)();
MyClass* p;
(p->*pmf)();

可以调用不同的函数,具体取决于p.

所以根本不清楚你在问什么。

于 2013-01-29T08:53:41.503 回答