получить адрес члена функции


Есть ли способ получить точный адрес члена функции? Например, у меня есть:

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

2 ответа:

Для объявления указателя на функцию-член можно использовать следующий синтаксис:

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

Для вызова нестатической функции-члена вам понадобится существующий экземпляр этого класса:

(fooInstance.*func)();

Я не совсем понимаю, что вы подразумеваете под "точным адресом". Есть конечно, нет никакого способа поместить какой-либо адрес в unsigned int (который меньше, чем указатель на моей машине). Для этого материя, нет никакого способа поместить указатель на функцию в а void*. Опять же, я использовал машины, где указатели на функция была больше, чем void*. И, наконец, нет никакого способ помещения указателя на (нестатическую) функцию-член в указатель на функцию; указатель на функции-члены почти всегда больше. Окончательно, дано:

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

Mais вызывают различные функции, в зависимости от содержания p.

Так что совершенно непонятно, о чем вы просите.