получить адрес члена функции
Есть ли способ получить точный адрес члена функции? Например, у меня есть:
struct foo
{
void print() { printf("bla bla bla"); }
};
//////////////////////////////////////////////////////////////
unsigned int address = foo::print;
2 ответа:
Для объявления указателя на функцию-член можно использовать следующий синтаксис:
typedef void (foo::*address)(); address func = &foo::print;
Для вызова нестатической функции-члена вам понадобится существующий экземпляр этого класса:
(fooInstance.*func)();
Я не совсем понимаю, что вы подразумеваете под "точным адресом". Есть конечно, нет никакого способа поместить какой-либо адрес в
unsigned int
(который меньше, чем указатель на моей машине). Для этого материя, нет никакого способа поместить указатель на функцию в аvoid*
. Опять же, я использовал машины, где указатели на функция была больше, чемvoid*
. И, наконец, нет никакого способ помещения указателя на (нестатическую) функцию-член в указатель на функцию; указатель на функции-члены почти всегда больше. Окончательно, дано:void (MyClass::*pmf)(); MyClass* p; (p->*pmf)();
Mais вызывают различные функции, в зависимости от содержания
Так что совершенно непонятно, о чем вы просите.p
.