2009-07-14 24 views
2

Numerical Recipes他們使用的東西,我以前從來沒見過做的,不容易找到信息:「函數指針」或「函數引用」作爲C++函數的參數發生了什麼?

void fun(std::vector<double> derivatives(const double, const std::vector<double> &)) { ...; derivatives(...); ...; } 

這我猜是通過引用傳遞函數(這是正確的)?爲什麼這會有利於使用函數指針?每種方法最適合哪種情況?

我有第二個問題: 當我調用首次程序掛起幾秒鐘的功能。現在,參數功能我通過本身,從調用一個函數指針即

vector<double>(*pfI)(const double) = NULL; 
    ... 
    pfI = pointedToFun; 
    void argFun() { ...; deRefPointedFun = (*Theta::pfI)(t); deRefPointedFun(); } 

有什麼更好的方式來處理2級的引用/指針功能不同的功能?

回答

9

這相當於

void fun(std::vector (*derivatives)(const double, const std::vector &)) { 
    ...; derivatives(...); ...; 
} 

而且類似

void f(int derivatives[]) { ... } 

如何等同於以下

void f(int *derivatives) { ... } 

所以該參數是一個函數指針。作爲參數的函數是函數指針。而數組作爲參數是指向它們的元素類型的指針。它不是類似於

void fun(std::vector (&derivatives)(const double, const std::vector &)) { 
    ...; derivatives(...); ...; 
} 

這是一個函數的引用,但只有很少使用:它不能用於函數指針參數,而函數指針參數可用於函數,函數引用和函數指針參數。

+1

作爲增加:有問題的語法看起來更清晰,然後使用* - 語法。我認爲這就是他們使用它的原因。 – 2009-07-14 19:29:56