我想写一个抽象的基类
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->operator()(num)这样的f似乎从一开始就违背了操作符重载的精神。((*f)(num)更好,但仍然如此。)
有没有办法让操作符重载和这样的抽象很好地结合在一起?
发布于 2012-07-06 04:22:31
尽管您可以通过将函数作为引用传递来实现此目的,但C++11标准内置了这些函数器类型:
double make_some_calculation(double d, std::function< double(double) > f) {
return f(d);
}
...
auto add_2=std::bind( std::plus(), 2.0 );
double result=make_some_calculation(1.1, add_2);https://stackoverflow.com/questions/11351928
复制相似问题