实现一个简单的+重载
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));}