Я определяю эту функцию с помощью универсального (и необязательного) объекта класса:
template <class OptionalClass = void>
double galg(std::function<double(std::vector<double>, OptionalClass)> func, std::vector<double>& parameters, OptionalClass extrainfo);
И использую его как:
double res = galg(fun, par, extra);
Где:
std::vector<double> par;
c_myclass extra;
double fun(std::vector<double> parameters, c_myclass extrainfo);
Однако я продолжаю получать эту ошибку:
error: no matching function for call to ‘galg(double (&)(std::vector<double>, c_myclass), std::vector<double>&, c_myclass&)’
err = galg(fun, par, extra);
^
In file included from ... note: candidate: ‘template<class OptionalClass> double galg(std::function<double(std::vector<double>, OptionalClass)>, std::vector<double>&, OptionalClass)’
double galg(
^~~~~~~~~~~
... note: template argument deduction/substitution failed:
... note: mismatched types ‘std::function<double(std::vector<double>, OptionalClass)>’ and ‘double (*)(std::vector<double>, c_myclass)’
err = galg(fun, par, extra);
Почему?Что я делаю не так?