Boost logo

Boost Users :

From: Luke Shulenburger (shulenbu_at_[hidden])
Date: 2007-10-22 11:25:52


I am writing some code that involves several uses of the gnu scientific
library that I am trying to streamline using boost lambda. I am having some
newbie problems with some rather lengthy compiler errors. Here's a fairly
minimal set description of my problem.

First I have a functor class that does some relatively complicated
processing:

class functor : public std::unary_function<double,double> {
public:
  double operator()(double x) const {
    // do some work here
    return something;
  }
}

For use with the gsl, I have created a wrapper to make this linto something
that can be handled by the gsl routines:

template<class func>
double gslfunc(double x, void* p) {
  func* f = reinterpret_cast<functor*>(p);
  return (*f)(p);
}

I now have the following function that allows me to use gsl routines:

template<class func>
double myRoutine(func& f) {
  gsl_function F;
  F.function = &gslfunc<functor>;
  F.params = reinterpret_cast<void*>(&f);
  // call some gsl routines with the gsl_function
  return something;
}

I can now use gsl routines on the above functor with no difficulty. What I
would like to be able to do is use lambda expressions
to make slight modifications to the underlying functor, for example take the
following code snippet:

functor f;
myRoutine(bind(f,_1)+1);

However, this dies a horrible death upon compilation complaining that there
is no available conversion from the
type that is generated by bind(f,_1)+1 to void*. I suspect that there is no
way to get a pointer to a lambda'd
function and that this is causing my problem. Am I correct? I would happy
to provide any more details about
what I am doing or the gsl bindings if that would be helpful. Thanks for
your consideration.

Luke Shulenburger
(shulenbu_at_[hidden])



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net