繁体   English   中英

如何使用boost :: bind创建函数包装器

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM