Функция принимает в аргумент указатель на другую функцию. Как правильно объявить прототип?
Ответ
С++: посредством 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
Пример кода:
#include
void parmFunc(){}
using FunctionPtr = std::function
int main()
{
func(&parmFunc); // вариант 1
func(std::bind(parmFunc)); // вариант 2
func([](){/* code of your function */}); // вариант 3
}
Если ваша функция должна возвращать значение и/или принимать параметры, то смотрите неформальное описание в данном ответе.
Комментариев нет:
Отправить комментарий