我想写一个抽象基类
class func_double_double_t : public unary_function<double, double>
{
virtual double operator()(double x) = 0;
};
并将其专门用于几种不同的类型
class func_pow_t : public func_double_double_t
{
public:
func_pow_t(double exponent) : exponent_(exponent) {};
virtual double operator()(double x) { return pow(x, exponent_); };
}
class func_exp_t : public func_double_double_t
...
并在必要时将它们传递给函数:
double make_some_calculation(double num, func_double_double_t f)
{
return f(x);
}
但是我不能定义一个类型的对象,func_double_double_t
因为它是抽象的。我可以传递一个指向函数的指针,但首先使用f
likef->operator()(num)
似乎违背了运算符重载的精神。((*f)(num)
更好,但仍然如此。)
有没有办法让运算符重载和这种抽象很好地结合在一起?