抽象基底クラスを書きたい
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
likeを使用f->operator()(num)
することは、そもそも演算子のオーバーロードの精神に反するようです。((*f)(num)
より良いですが、それでも。)
演算子のオーバーロードとそのような抽象化をうまく連携させる方法はありますか?