2012-04-30 24 views
1

boost::geometry::get関数described hereを別の関数に渡そうとしていますが、正しくできないようです。boost :: geometry関数への関数ポインタ

私がしている:

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>)’ 

私は私の関数を呼び出してみました:私は問題の一部は、そのI以来だと思い

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

getに引数を渡さないと、コンパイラはどのタイプを把握できませんGeometryは関数シグネチャ内になければなりません。

この関数をどのように渡すのですか?

+0

不必要な環境をすべて削除して、これをすべて同じ問題がある単純な 'std :: get'に減らすことができます。 – pmr

答えて

0

これは完全にboost.geometryに固有ではありません。オーバーロードされているか、すべてのテンプレートパラメータを明示的に渡す必要がある場合は、static_castの関数を正確な型にする必要があります。 2番目の場合(例:&get<0, GeometryType>)です。

+0

テンプレートの型を 'get'のために提供することは役に立たないようです。私は非ブーストの例にそれを沸かせることができるかどうかを見ます。 – tpg2114

+0

私が実際に抱えていた問題は、 'boost :: geometry'と' get'関数がデフォルトの未定義のパラメータを持っていることが原因であることが判明しました。関数のポインタ宣言でそれらを指定しなければ、テンプレートの引数があったとしても、それは一致しなかったので問題はありませんでした。 – tpg2114

+0

@ tpg2114その場合、私はC++ 11ラムダを使うことを提案したり、呼び出しをラップしてファンクタに入れることができます。あなたが引数を指定する必要がないように、ファンクタの名前と 'operator()'の呼び出しは、テンプレートパラメータの控除を使用します。デフォルトのパラメータ、引数のないパラメータなどを含む関数テンプレートは、バインドする雌犬です。 – pmr

関連する問題