我想使用boost :: bind(我不确定它是否真的是我的问题的正确解决方案)来创建一个包含一个或两个参数的函数的包装器,而包装器只接受一个参数将另一个修复为某个常量值。我的功能看起来像
double f(double a, double b)
{
return a/b;
}
或
double g(double b)
{
return 2*b; // b+b?
}
在我的代码中,我有一个带有一个参数的函数的typedef:
typedef boost::function<double (double)> callback;
我的想法是用这个创建函数包装器:
callback cb;
cb = boost::bind(f, _1, 2)(x);
这样我就可以调用使用在参数中传递的包装函数的第三个函数:
double use(callback cb, double x, double y)
{
return cb(x0) - y0;
}
我有大约30个带有一个或两个参数的函数,第一个或第二个必须是常量。 use()
不知道此常量,但use
中实现的算法适用于每个函数。
当我尝试编译代码时,我遇到了行cb = boost::bind(f, _1, 2)(x);
的错误:
'* f' cannot be used as a function
当我尝试直接使用绑定时,就像在cout << boost::bind(f, _1, 2)(x);
中一样,我没有收到错误。
我在这里做错了什么?
答案 0 :(得分:2)
为什么要添加(x)
?
cb = boost::bind(f, _1, 2);
这已经定义了f
的包装器,第二个参数是2,你可以调用
cb(x0)
获取f(x0, 2)
。