问题在这里:
std::function<double(double)> F = std::bind(ftest, 1, _2, 2);
is that F
是一个采用单个参数类型的函数double
,但是你的绑定表达式涉及_2
- 指传递给函数对象的第二个参数bind()
返回。那就是second争论。基本上,您正在构造这个函数对象,大致如下:
struct {
template <class T, class U>
auto operator()(T, U arg) {
return ftest(1, arg, 2);
}
};
该对象有两个参数。std::function<double(double)>
不允许这样做 - 它要求您的可调用对象允许单个参数。
简单的修复方法是修复占位符:
std::function<double(double)> F = std::bind(ftest, 1, _1, 2);
或者,更好的是,不要使用bind()
完全并且更喜欢 lambda:
std::function<double(double)> F = [](double y) { return ftest(1, y, 2); }