Страницы

Поиск по вопросам

пятница, 11 января 2019 г.

Функция, принимающая указатель на другую функцию

Функция принимает в аргумент указатель на другую функцию. Как правильно объявить прототип?


Ответ

С++: посредством typedef
Неформально:
typedef ReturnType(*FunctionPtr)(Parm1Type, Parm2Type, ...);
Прототип:
typedef void(*FunctionPtr)(); void func(const FunctionPtr& functionPtr);
Пример кода:
void parmFunc(){}
typedef void(*FunctionPtr)(); void func(const FunctionPtr& functionPtr){ functionPtr(); }
int main() { func(&parmFunc); }

С++11: посредством using
Неформально:
using FunctionPtr = ReturnType(*)(Parm1Type, Parm2Type, ...);
Прототип:
using FunctionPtr = void(*)(); void func(const FunctionPtr& functionPtr);
Пример кода:
void parmFunc(){}
using FunctionPtr = void(*)(); void func(const FunctionPtr& functionPtr){ functionPtr(); }
int main() { func(&parmFunc); // вариант 1 func([](){/* code of your function */}); // вариант 2 }

C++11: посредством std::function
Неформально:
using FunctionPtr = std::function;
Прототип:
#include
using FunctionPtr = std::function; void func(const FunctionPtr& functionPtr);
Пример кода:
#include
void parmFunc(){}
using FunctionPtr = std::function; void func(const FunctionPtr& functionPtr){ functionPtr(); }
int main() { func(&parmFunc); // вариант 1 func(std::bind(parmFunc)); // вариант 2 func([](){/* code of your function */}); // вариант 3 }

Если ваша функция должна возвращать значение и/или принимать параметры, то смотрите неформальное описание в данном ответе.

Комментариев нет:

Отправить комментарий