如何使用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)
得到CCD_ 7。
相关文章:
- 将 N-arg 函数包装到另一个函数中
- 将函数包装器转换为 std::function
- C++函数包装器来捕获某些信号
- 考虑引用和常量的可变参数函数包装器
- 将此私有删除器函数包装在结构中的目的是什么?
- 处理模板函数包装中的void返回
- 如何使用可变模板编写通用函数包装器
- 其他成员函数的通用"成员函数"包装器?
- 为什么将函数包装到 lambda 中可能会使程序更快?
- 创建一个允许轻松创建虚拟函数包装器函数的C++宏
- 将 c++ 函数包装为 c#,具有结构的总动态大小
- 返回对 std::函数包装的 lambda 中静态变量的引用会导致段错误
- 标准库中是否有与 std::thread 的构造函数语义匹配的类型擦除函数包装器?
- 如何编写 C++ 类成员函数包装器
- 有没有一种方法可以在基于枚举的可变参数模板函数之间进行选择,这比将函数包装在结构中更简单
- 任何返回类型的可变参数函数包装器
- 具有临时函数包装器的完美转发
- 推导成员函数包装器的返回类型时出错
- 使用可变参数模板函数包装基于省略号的函数
- 将C 模板构造函数包装在模板类中