Похоже, вам нужна только сама функция. Ты почти получил это. Вот правильный синтаксис:
typedef double (*functype)();
void foo(functype f) {
cout << f();
}
double bar() {
return 2.39;
)
foo(bar); // don't call bar here, just pass it as address.
Вы также можете объявить Foo следующим образом:
void foo(double (*f)());
Функции не являются первоклассными объектами в C ++, поэтому единственным способом создания закрытия с некоторыми переменными (например, если вы хотите носить функцию или вызвать нестатическую функцию-член), являются функторы (объекты с перегруженным оператором () ) Есть несколько способов получить такой объект:
- Определите его самостоятельно, храните все необходимые переменные в полях и передайте его как аргумент функции.
- Используйте функции Lambda C ++ 11 и функция Std ::
- Используйте Boost :: Function и Boost :: Bind.