我尝试做类似
的事情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;
}
};
我想重载operator()以使用不同的算法,例如std :: accumulate或std :: transform。我对operator()(double,double)的基类定义非常满意。但是我无法从派生类中调用它。我是否必须为从base派生的每个类重写相同的代码?
答案 0 :(得分:6)
这里的问题是在派生类中定义一个函数会在基类中隐藏相同的函数;这就是您无法从派生类访问operator()(double, double)
的原因。
但是有一种方法可以做到:你可以在派生类中使用using
指令:
class derived: public base {
using base::operator();
virtual double operator() (double val) {
return someting_clever;
}
};
答案 1 :(得分:3)
您是否尝试过使用指令?
class derived: public base {
virtual double operator() (double val) {
return someting_clever;
}
using base::operator();
};