2013-02-19 139 views
1

我试图使代码找到函数的数值派生。 我也有一个多项式类描述如下:使用另一个类成员的类成员函数指针

class polynomial 
    { 
    public: 
     polynomial(Vector, int); 
     polynomial(); 
     ~polynomial(); 

     double returnValue(double); 
     void print(); 

    private: 
     int Degree; 
     Vector Coeficients; 
    }; 

我的数值推导有如下原型:

double numericalDerivation(double (*F) (double), double x); 

我要到returnValue方法传递到numericalDerivation,这可能吗?

+0

编号'returnValue'不是一个函数,即你不能*调用它。在这个网站上搜索数百个关于如何处理成员函数指针的重复内容。 – 2013-02-19 01:44:07

+0

实际上,'returnValue'是一个函数,但是一个成员函数。 'numericDerivation'需要一个函数指针,而不是一个成员函数指针(这将是一个不同的类型)。 – jogojapan 2013-02-19 01:49:11

回答

0

是的,这是可以的,但不要忘了这是一个成员功能:你就不能调用它,而无需一个(指针)polynomial类型上调用它的对象。

这是你的函数的签名应该如何看起来像:

double numericalDerivation(double (polynomial::*F)(double), polynomial* p, double x) 
{ 
    ... 
    (p->*F)(x); 
    ... 
} 

这里是你将如何调用它:

double d = ...; 
polynomial p; 
numericalDerivation(&polynomial::returnValue, &p, d); 

或者,你可以使用一个std::function<>对象作为参数你的功能,并让std::bind()负责绑定对象到成员函数:

#include <functional> 

double numericalDerivation(std::function<double(double)> f, double x) 
{ 
    ... 
    f(x); 
    ... 
} 

... 

double d = ...; 
polynomial p; 
numericalDerivation(std::bind(&polynomial::returnValue, p, std::placeholders::_1), d); 
+0

感谢您的解决方案,如果我使用重载,第一种解决方案也可以工作,我尝试了第二种解决方案,并得到以下错误:术语不评估为带有1个参数的函数,现在可以使用,谢谢! – 2013-02-19 02:00:13

+0

@LucasDaRochaSouza:等等,它工作与否? – 2013-02-19 02:06:03

+0

对不起,现在开始工作,谢谢。 – 2013-02-19 02:07:46