У меня есть функция fx_1
, которая принимает функцию и другие аргументы. Я хочу создать новую функцию f1
, аргументами которой являются некоторые из fx_1
. Однако я не могу использовать f1
.
#include <iostream>
#include <functional>
#include <cmath>
using namespace std;
using namespace std::placeholders;
double fun_exp(double x, double* y) {
return exp(x) - x - 1;
};
double fx_1(function<double(double, double*)> fun,
double x0, double* data = nullptr, int order = 4) {
return 5.0;
};
int main() {
auto f1 = bind(fx_1, fun_exp, _2, _3, 4);
double* x = new double;
*x = 6.0;
cout << f1(3.0, x) << endl; //Compile Error
function<double(double, double*)> f2 = bind(fx_1, fun_exp, _2, _3, 4); //Error.
function<double(double, double*)> f3 = bind<double,
function<double(function<double(double, double*)> fun, double, double*, int)>,
double, double*>(fx_1, fun_exp, _2, _3, 4); //Error.
}
Я думал, что f1
должен принимать аргументы типа double, double*
, потому что типы аргументов 2 и 3 из fx_1
double, double *
.
В f2
и f3
я пытался явно задать аргументы шаблона, однако они оба не работают.