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

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

struct foo
{
    void print() { printf("bla bla bla"); }
};
//////////////////////////////////////////////////////////////
unsigned int address = foo::print;
2
nl ja de
"неподписанный международный адрес" - нет, нисколько.
добавлено автор Christian Rau, источник
В зависимости от того, как вы собираетесь использовать указатель, рассмотреть изучение станд.:: функция и станд.:: связать.
добавлено автор Some programmer dude, источник
Что вы пытаетесь сделать?
добавлено автор Peter Wood, источник
похожие страницы: stackoverflow.com/questions/1485983/…
добавлено автор Ciro Santilli 包子露宪 六四事件 法轮功, источник

2 ответы

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

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

Чтобы назвать нестатическую функцию членства, вам будет нужен существующий случай того класса:

(fooInstance.*func)();
3
добавлено
@xersi, прочитанный о указатели функции и послушайте совет Джоакима Пилеборга о станд.:: функция и станд.:: свяжите .
добавлено автор Paula_plus_plus, источник
@xersi: указатели функции членства почти всегда больше, чем ' regular' функция или указатели данных. Так нет - вы can' t хранят указатель функции членства в пустота* , даже с кастингом.
добавлено автор Michael Burr, источник
@xersi нет. пустота* является типом указателя данных. Ваш указатель функции членства - кодовый тип указателя. Есть, трудно как это должно предположить, платформы, где они измеряют, и/или кодирование типов указателей отличается (я могу думать два сразу же манжета, оба от IBM). Я предлагаю, чтобы вы познакомились с этот вопрос и его ответы. Тогда, когда вы думаете, что необходимо сохранить указатель функции в пустота* , don' t .
добавлено автор WhozCraig, источник
parashift.com/c ++-faq/cant-cvt-memfnptr-to-voidptr.html
добавлено автор billz, источник
Спасибо, но foo:: печать -> пустота* адрес - действительно ли это возможно?
добавлено автор xersi, источник

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

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

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

Таким образом, нисколько не ясно, что вы просите.

1
добавлено
pro.cxx
pro.cxx
3 049 участник(ов)

C/C++ chat 0. Простые вопросы, лабы и о IDE — в чат новичков @supapro 1. Не хамим, не переходим на личности, не вбрасываем утверждения без доказательств 2. No Ads, offtop, flood Объявления о вакансиях и евенты - в лс @AlexFails https://t.me/ProCxx/259155

supapro.cxx
supapro.cxx
1 925 участник(ов)

Чат для тех, кто немного знает C++, простые вопросы по реализации, синтаксису и ide – сюда, а для другого есть: /Главный чат по серьезным вопросам — @ProCxx /Чат по обсуждению всего — @fludpac

C++ Russia
C++ Russia
384 участник(ов)

Сообщество разработчиков C++ в Telegram.

cxx.Дискуссионная
cxx.Дискуссионная
298 участник(ов)

это не двач, общайтесь вежливо; разговор на почти любые темы; Не согласны с баном? В лс @AlexFails, @ivario

C++ для маленьких и тупых
C++ для маленьких и тупых
105 участник(ов)

Лоу левел (по среднему IQ участников) чатик ExtremeCode @extremecode Флудилка @extremecode_rest