Что значит передать параметр типа функции в C ++? - PullRequest
8 голосов
/ 18 марта 2011

Некоторое время назад я обнаружил, что можно написать функцию C ++, которая принимает параметр типа функции ( не тип указателя на функцию!). Например, вот функция, которая принимает функцию обратного вызова, которая принимает и возвращает значение типа double:

void MyFunction(double function(double));

Мой вопрос заключается в том, что значит иметь переменную типа функции, поскольку вы не можете объявить ее в любом другом контексте. Семантически, чем он отличается от указателя на функцию или ссылки на функцию? Есть ли важное различие между указателями на функции и переменными типа функции, о которых я должен знать?

1 Ответ

13 голосов
/ 18 марта 2011

Так же, как void f(int x[]) совпадает с void f(int* x), следующие два идентичны:

void MyFunction(double function(double)); 
void MyFunction(double (*function)(double)); 

Или на официальном языке (C ++ 03 8.3.5 / 3) при определении типа функции

После определения типа каждого параметра любой параметр типа «массив из T» или «функция, возвращающая T» настраивается на «указатель на T» или «указатель на функцию, возвращающую T "соответственно.

...