[英]How to use boost::bind to create a function wrapper
我想使用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);
,我没有收到错误。
我在这里做错了什么?
为什么加上(x)
?
cb = boost::bind(f, _1, 2);
这已经定义了f
的包装,第二个参数是2,您可以调用
cb(x0)
得到f(x0, 2)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.