2013-02-19 169 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