gpt4 book ai didi

c++ - 如何将 boost::bind 对象存储为成员变量?

转载 作者:太空狗 更新时间:2023-10-29 23:51:09 27 4
gpt4 key购买 nike

我正在使用 boost::bind 即时创建组合函数,并希望将对象存储为某个类成员变量以供以后使用。例如我们有两个仿函数:

struct add{double operator()(double x, double y) const{return x+y;};};  
struct multiply{double operator()(double x, double y) const{return x*y;};};

然后创建函数 f(x,y,z) = (x+y)*z,我可以这样做:

auto f = boost::bind<double>(multiply(), boost::bind<double>(add(), _1, _2), _3);

并且调用 f(x,y,z) 效果很好。现在我想将 f 保存为类成员变量,如下所示:

struct F  
{
auto func;
double operator(const std::vector<double>& args) const
{
return func(args[0],args[1],args[2]); //Skipping boundary check
}
}

F f_obj;
f_obj.func = f;
f_obj(args);

但是我当然不能声明自动变量。有什么办法可以解决这个问题吗?

请注意,我没有使用 boost::function,因为它会显着影响性能,这对我来说很重要。

感谢您的任何建议。

最佳答案

两个选项:使用 boost::function,并衡量它是否真的影响性能。

或者使 F 成为一个以 func 类型为参数的模板,并从 bind 表达式的类型推导出它。

编辑:第二个选项的问题是它没有摆脱笨拙的类型。您可以通过使用模板覆盖的纯虚函数定义基类来做到这一点。但是你需要管理动态内存和支付虚拟函数的成本 - 所以你不妨回到 boost::function (或 std::function ) 为您做同样的事情。

关于c++ - 如何将 boost::bind 对象存储为成员变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23469796/

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