gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 03:40:27 26 4
gpt4 key购买 nike

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

当我尝试直接使用绑定(bind)时,如 cout << boost::bind(f, _1, 2)(x); , 我没有收到错误。

我做错了什么?

最佳答案

为什么要添加(x)

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

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

cb(x0)

得到 f(x0, 2)

关于c++ - 如何使用 boost::bind 创建函数包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9442811/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com