это так, но почему там тело ?? callme
является членом (указателем на функцию).
РЕДАКТИРОВАТЬ Я понятия не имею, почему это понизили.
Нельзя ходить писать
int (*a)(int, int) {
}
потому что int (*a)(int, int);
определяет переменную a
, которая имеет тип int (*)(int, int)
.
Если новичок хочет использовать функцию в качестве обратного вызова в callSomeApi
, ему нужно сделать
class myClass {
....
void callme(int a, int b);
....
}
void myClass::callMain() { callSomeApi(&myClass::callme, this, <etc>); }
void myClass::callme(int a, int b) { ... }
и надеемся, что callSomeApi принимает pmfs или функциональные объекты (и использует bind
или аналогичные методы)
РЕДАКТИРОВАТЬ для изменений сошника.
указатель на функцию-член является указателем. это не функция.
Для иллюстрации
int a() { return 1; }
определяет функцию a
. Эта функция имеет тип int ()
. Функция также имеет тело функции.
Однако указатель функции определяется через:
int (*f)();
В этом случае f
является указателем на функцию. не имеет тело функции (потому что это не функция).
Можно назначить указатели на функции, например, через =
: f = &a;
или f = a;
, что позволит нам впоследствии сделать f();
, что вызовет a
.
Но в основном указатель на функцию не имеет тела. Также нет указателей на функции-члены.