mat*_*tII 2 c++ boost bind functor
我正在使用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;};};
Run Code Online (Sandbox Code Playgroud)
然后创建函数f(x,y,z)=(x + y)*z,我可以这样做:
auto f = boost::bind<double>(multiply(), boost::bind<double>(add(), _1, _2), _3);
Run Code Online (Sandbox Code Playgroud)
调用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);
Run Code Online (Sandbox Code Playgroud)
但当然我不能声明一个自动变量.有没有办法解决这个问题?
请注意,我没有使用boost :: function,因为它会极大地影响性能,这对我很重要.
谢谢你的建议.
两个选项:使用boost::function,并衡量它是否实际影响性能.
或者,使F模板采用func as参数的类型,并从bind表达式的类型推导出它.
编辑:第二个选项的问题是它没有摆脱尴尬的类型.您可以通过使用模板覆盖的纯虚函数定义基类来实现.但是你需要管理动态内存以及支付虚拟功能的成本 - 所以你可以回到boost::function(或std::function)那对你做同样的事情.