2012-04-30 145 views
1

我試圖通過boost::geometry::get函數described here到另一個函數,但我似乎無法得到它的權利。函數指針升壓::幾何函數

我:

template<typename StorageType = double, 
     std::size_t D = 3> 
class Derivative : public DerivativeBase<StorageType, D> { 
public: 
typedef typename DerivativeBase<StorageType, D>::results_t results_t; 

template<typename Iterator, typename Geometry> 
results_t operator()(Iterator& objIterator, StorageType (*getter)(Geometry const&)) 
... 

和編譯器拋出:

error: no match for call to ‘(Derivative<double, 3ul>) (iterator&, <unresolved overloaded function type>)’ 

我試着打電話給我的功能有:

derivs = myDerivs(it, &boost::geometry::get<0>); 

我想這個問題的一部分,因爲我不要將參數傳遞給get,編譯器無法弄清楚什麼類型爲Geometry應該在函數簽名中。

我該如何去傳遞這個函數?

+0

你可能想刪除所有不必要的環境,並將其減少到一個簡單的'std :: get',它們都有相同的問題。 – pmr

回答

0

這完全沒有針對boost.geometry。如果函數過載或需要顯式傳遞所有模板參數,則需要將函數static_cast設爲精確類型。第二種情況是這裏的情況(例如&get<0, GeometryType>)。

+0

將該類型提供給'get'模板似乎沒有任何幫助。我會看看我是否可以把它歸結爲一個非增強的例子。 – tpg2114

+0

事實證明,我實際上遇到的問題是由於'boost :: geometry'和'get'函數具有默認的,未記錄的參數。沒有在函數指針聲明中指定它們,我沒有模板參數並不重要,因爲它無論如何都不匹配。 – tpg2114

+0

@ tpg2114在這種情況下,我會建議使用C++ 11 lambda或包裝調用進入函子。這樣你就不必指定參數,只需要函數的名字,而對'operator()'的調用將使用模板參數推導。具有默認參數的函數模板,非參數參數等是一個婊子來綁定。 – pmr