C++ 使用基类的重载函数

C++ 使用基类的重载函数,c++,overloading,derived-class,C++,Overloading,Derived Class,我试着做一些类似的事情 class base { public: virtual double operator() (double val) = 0; virtual double operator() (double prev, double val) { return prev + operator()(val); } }; class derived: public base { virtual double operator() (do

我试着做一些类似的事情

class base {
public:
    virtual double operator() (double val) = 0;
    virtual double operator() (double prev, double val) {
        return prev + operator()(val);
    }
};

class derived: public base {
    virtual double operator() (double val) {
        return someting_clever;
    }
};

我想重载操作符()以将其与不同的算法(如std::acculate或std::transform)一起使用。我完全满意操作符()的基类定义(double,double)。但是,我不能从派生类调用它。我是否必须为从base派生的每个类重写相同的代码?

您是否尝试过使用指令

class derived: public base {
    virtual double operator() (double val) {
        return someting_clever;
    }
    using base::operator();
};

这里的问题是,在派生类中定义函数会隐藏基类中的相同函数;这就是您无法从派生类访问
operator()(double,double)
的原因

但是有一种方法可以做到:您可以在派生类中使用
using
指令:

class derived: public base {
    using base::operator();
    virtual double operator() (double val) {
        return someting_clever;
    }
};

我想你遇到的问题和我一样