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

How to use boost::bind to create a function wrapper

本文关键字:函数 包装 创建 bind 何使用 boost      更新时间:2023-10-16

我想使用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)

得到CCD_ 7。