Указатель функции-члена имеет следующую форму:
R (C::*Name)(Args...)
Где R
- тип возврата, C
- тип класса, а Args...
- любые возможные параметры функции ( или нет).
С этим знанием ваш указатель должен выглядеть следующим образом:
void (golu::*t)() = &golu::man;
Обратите внимание на отсутствующий ()
после функции-члена. Это попытается вызвать указатель функции-члена, который вы только что получили, и это невозможно без объекта. Теперь это становится более читаемым с помощью простого typedef:
typedef void (golu::*golu_memfun)();
golu_memfun t = &golu::man;
Наконец, вам не нужен указатель на объект для использования функций-членов, но вам нужна скобка:
golu m;
typedef void (golu::*golu_memfun)();
golu_memfun t = &golu::man;
(m.*t)();
Скобки важны, поскольку оператор ()
(вызов функции) имеет более высокий приоритет (также называемый приоритет ), чем оператор .*
(и ->*
).