Если вы можете изменить подпись fun
, ответ rafix07 будет идеальным.
Если вы не хотите изменять количество параметров fun
, вы, вероятно, захотите написать что-то вроде этого:
double fun(double(*f)(double), double x)
{
return f(x);
}
int main() // not void
{
Test d(2.0);
double r = fun([d](double double_){ return d.curve(double_); }, 3.0);
std::cout << r;
}
К сожалению это не работает , потому что лямбда может быть сохранена в указателе функции, только если она не использует захват.
Итак, у вас есть 2 решения:
1) шаблон
// Must be in .hpp
template <class T>
double fun(T f, double x)
{
return f(x);
}
int main() // not void
{
Test d(2.0);
double r = fun([d](double double_) mutable { return d.curve(double_); }, 3.0);
}
2) стандартная функция :: 1022 *
#include <functional>
double fun(std::function<double(double)> f, double x)
{
return f(x);
}
Примечание: вы должны использовать mutable
, потому что double curve(double x)
не const
, я думаю, что это должно быть.