Чтобы определить указатель на функцию, используйте следующий синтаксис:
return_type (*ref_name) (type args, ...)
Итак, чтобы определить ссылку на функцию с именем "doSomething", которая возвращает int
и принимает аргумент int
, вы должны написать следующее:
int (*doSomething)(int number);
Затем вы можете присвоить ссылку фактической функции следующим образом:
int someFunction(int argument) {
printf("%i", argument);
}
doSomething = &someFunction;
Как только это будет сделано, вы можете вызвать его напрямую:
doSomething(5); //prints 5
Поскольку указатели на функции по сути являются просто указателями, вы действительно можете использовать их в качестве переменных экземпляра в ваших классах.
Принимая указатели на функции в качестве аргументов, я предпочитаю использовать typedef
вместо использования загроможденного синтаксиса в прототипе функции:
typedef int (*FunctionAcceptingAndReturningInt)(int argument);
Затем вы можете использовать этот вновь определенный тип в качестве типа аргумента для функции:
void invokeFunction(int func_argument, FunctionAcceptingAndReturningInt func) {
int result = func(func_argument);
printf("%i", result);
}
int timesFive(int arg) {
return arg * 5;
}
invokeFunction(10, ×Five); //prints 50