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 {
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(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(&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@uiuc.edu)