Что происходит с «указателем на функцию» или «ссылкой на функцию» в качестве аргумента для функции в C ++? - PullRequest
3 голосов
/ 14 июля 2009

In Числовые рецепты они используют то, что я никогда раньше не делал, и не могут легко найти информацию о:

void fun( std::vector<double> derivatives(const double, const std::vector<double> &) ) { ...; derivatives(...); ...; }

Что я предполагаю, передает функцию по ссылке (это правильно)? Почему это было бы выгодно для использования указателя функции? В какой ситуации предпочтителен каждый метод?

У меня есть вторая проблема: Когда я вызываю эту функцию в первый раз, программа зависает на несколько секунд. Теперь сама функция аргумента, которую я передаю, вызывает функцию, отличную от указателя функции, т.е.

  vector<double>(*pfI)(const double) = NULL;  
  ...
  pfI = pointedToFun;
  void argFun() { ...; deRefPointedFun = (*Theta::pfI)(t); deRefPointedFun(); }

Как лучше всего обрабатывать 2 уровня ссылочных функций / функций указателя?

1 Ответ

9 голосов
/ 14 июля 2009

Это эквивалентно

void fun( std::vector (*derivatives)(const double, const std::vector &) ) { 
  ...; derivatives(...); ...; 
}

И похоже на то, как

void f(int derivatives[]) { ... }

эквивалентно следующему

void f(int *derivatives) { ... }

Таким образом, параметр является указателем на функцию. Функции в качестве параметров являются указателями на функции. И массивы в качестве параметров являются указателями на их тип элемента. Это не похоже на

void fun( std::vector (&derivatives)(const double, const std::vector &) ) { 
  ...; derivatives(...); ...; 
}

Это ссылка на функцию, но она используется редко: ее нельзя использовать для аргументов указателя функции, в то время как параметр указателя функции можно использовать для функции, ссылки на функцию и аргументы указателя функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...