读书人

实现一个简单的+重载解决方案

发布时间: 2012-04-22 18:34:46 作者: rapoo

实现一个简单的+重载
typedef double (*Func)(double);
Func f1, f2,f3;
实现如下运算
f1 = f2 + f3;//也就是实现f1(x) = f2(x) + f3(x)
那么
Func operator+ (Func f2, Func f3)
{
}
应该怎么实现

[解决办法]
可以用类来模拟指针,然后重载类的加法:

C/C++ code
class IFunc {public:    virtual double _call(double) = 0;};class BaseFunc : public IFunc {public:    BaseFunc(double (*f)(double)) : m_f(f) {};private:    virtual double _call(double r)    {        return (*m_f)(r);    }    double (*m_f)(double);};class Func{public:    Func(IFunc* pfun) : m_pfun(pfun) {};    Func(double (*f)(double)) : m_pfun(new BaseFunc(f))    {};public:    double operator()(double r) {        return m_pfun->_call(r);    }private:    IFunc* m_pfun;};class SumFunc : public IFunc {public:    SumFunc(Func f1, Func f2) : m_f1(f1), m_f2(f2) {};private:    virtual double _call(double r)    {        return m_f1(r) + m_f2(r);    }    Func m_f1;    Func m_f2;};Func operator+(Func f1, Func f2){    return Func(new SumFunc(f1, f2));}double add(double r){    return r + 10.0;}double mul(double r){    return r * r;}int main(){    Func f1 = add;    Func f2 = mul;    Func f3 = f1 + f2;    printf("%f", f3(2.0));} 

读书人网 >C++

热点推荐