2012-04-30 5 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>)’ 

내가 내 함수를 호출 시도 :

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 람다를 사용하거나 함수를 호출하여 함수를 작성하는 것이 좋습니다. 그런 식으로 인수를 지정할 필요가 없으며, 펑터의 이름과'operator()'의 호출은 템플릿 매개 변수 공제를 사용합니다. 기본 매개 변수, 인수가 아닌 매개 변수 등이있는 함수 템플릿은 바인딩 할 암말입니다. – pmr

관련 문제