繁体   English   中英

函数类中的重载乘法(加法,…)运算符

[英]Overloading multiplication (addition, …) operator in function class

抱歉,我有一个完整的菜鸟问题。 一直想自己弄清楚,但我似乎无法在Google上找到相关信息。

让我们这样说,我有这段代码:

class function
{
public:
    double (*f)(double x);
    function(double f(double x)): f(f){}
    double evalf(double x){
        return this->f(x);
    };
    function operator*(const function& other) const {
        return function(this->f*other.f);
    };
};

问题是*超载不起作用,问题在于他不知道如何将两个f相乘。 好的,这就是我的工作:例如,我使用lambda表达式调用构造函数

auto linear = [](double x){return x;};

auto blub = function(linear);

我发现自己

return function(this->f*other.f);

完全无法正常工作,所以我尝试了

auto mul = [&](double x){return this->f(x) * other.f(x);};
return function(mul);

但这也不起作用。 有趣的是,它似乎在函数类之外工作。

auto mul = [](double x){return linear*linear;};

效果很好。

有人对我有解决方案吗? 提前致谢。

如您所知,要进行乘法运算,您需要使用lambda,但是具有捕获功能的lambda不能转换为函数指针。 所以你在这里做什么

 auto mul = [&](double x){return this->f(x) * other.f(x);}; return function(mul); 

要工作,您需要将f更改为

std::function<double(double)> f

你在一起最终

class function
{
public:
    std::function<double(double)> f;

    function(std::function<double(double)> f): f(f){}
    double evalf(double x){
        return f(x);
    };
    function operator*(const function& other) const {
        return function( [=]( double x ){ return this->f(x) * other.f(x); } );
    };
};

然后可以使用,请参阅在coliru上直播

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM