2012-02-25 83 views
0

我想使用boost ::绑定(我不知道这是否真的是我的问题的解决方案)创建一个包装,它有一个功能或两个参数,而包装只接受一个参数并将其他参数固定为某个常量值。我的功能看起来像如何使用boost ::绑定创建一个函数包装

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);,我没有得到一个错误。

我做了什么错在这里?

回答

2

为什么添加(x)

cb = boost::bind(f, _1, 2); 

这已经定义的f它的第二个参数是2的包装,你可以调用

cb(x0) 

得到f(x0, 2)

+0

我加入了'(x)的'因为'提振:: bind'文档中所有的例子做。现在,当你指出这一点似乎很清楚,因为缺少的参数是通过使用'填写()',而不是当绑定完成闻名。它现在有用,谢谢! – Christoph 2012-02-25 09:35:07

相关问题