2016-02-29 95 views
-3

構造請問可不可以幫我傳遞一個仿函數,如:傳遞仿函數在C++

struct BFunc 
{ 
    double operator()(const double x, const double y, const double z){ 
     return 0.1; 
     } 
}; 

到一類的構造函數:

class foo 
{ 
    int n; 
public: 
foo(); 
foo(int nn, &bfunc):n(nn),f(func()){   
    } 
double getResult(double x){ 
     return f(x); 
    } 
} 

謝謝,

+0

構造函數和getResult函數中的f是什麼?您沒有聲明任何此類數據成員。 –

+1

你想傳遞什麼?具有特定簽名的功能?任何重載'operator()'的對象?或者一個'BFunc'的實例?我假設你想把它存儲在一個名爲f的成員中,但是現在你試圖用一個參數調用這個f,而你的'BFunc :: operator()'有3個參數。 – Anedar

+1

沒有什麼關於函子的特別之處。它只是一個重載'operator()'的對象,所以你可以像傳遞任何對象那樣傳遞它。這可能會讓你在正確的道路上http://rextester.com/WQVBI94166 – Olumide

回答

0

謝謝大家的快速回復。我通過將類型函子的變量聲明爲波紋管來解決它。但我想知道如果沒有這個可以做到。關鍵是我想創建一個類,它將一個函數作爲邊界條件和一個範圍傳遞給它,因此它創建了一個座標的二維或三維矩陣,它給出了所有點內部的零點以及零點外部的所有點。我想盡可能地把它變成一般。最終我結束了遵循以下方法。

using namespace std; 

struct functor { 
    int a=11; 
    int operator() (int x) const { 
    cout << a << endl; 
    return 2*x; 
    } 
}; 

class myclass { 
    int y=0; 
    functor af;// ** I did not wanted to have this line and make it generic ** // 
public: 
    template <typename F> myclass(const F & f):af(f){ 
     //af=f;//auto af(f); 
     y=f(5); 
     cout<<"y is"<<y<<endl; 
     int z=af(5); 
     cout<<"z is"<<z<<endl; 
     cout<<" why "<<typeid(af).name()<<endl; 
    } 
    int getFuncX(int x){ 
     int y=af(x); 
     return y; 
    } 


}; 

int main(int argc, char **argv) { 
    functor f = {5}; 
    myclass c(f); 
    cout<<" See What happens: "<<c.getFuncX(71)<<endl; 

    return 0; 
} 

對不起,如果是凌亂!正如你猜測我是初學者。 謝謝