Search code examples
c++function-pointersboost-geometry

Function pointer to boost::geometry function


I'm trying to pass the boost::geometry::get function described here to another function, but I can't seem to get it right.

I have:

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&))
...

and the compiler throws:

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

I tried calling my function with:

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

I guess part of the issue is that since I don't pass an argument to get, the compiler can't figure out what type Geometry should be in the function signature.

How do I go about passing this function through?


Solution

  • This is entirely non-specific to boost.geometry. You need to static_cast the function to it's exact type if it is overloaded or you need to pass all template parameters explicitly. The second is the case here (e.g. &get<0, GeometryType>).