Boost logo

Boost Users :

Subject: Re: [Boost-users] boost::function, pointer to a member function.
From: Mathias Gaunard (mathias.gaunard_at_[hidden])
Date: 2010-06-11 09:29:05


Mikhail Tatarnikov wrote:
> Hi guys,
>
> Is there a way to make boost::function to be passed to a function required a
> pointer to a member function as parameter:
>
> struct CFoo
> {
> int foo1(int){}
> int foo2(int, double){}
> };
>
> int g(int (CFoo::*)(int));
>
> int main()
> {
> g(&CFoo::foo1);
>
> g(boost::bind(&CFoo::foo2, _1, _2, 666)); // Doesn't compile -
> boost::bind returns an object instead of function pointer

There is no way to fix this.
g expects a pointer to member function of the class CFoo.

> // The following doesn't compile - can't convert from int (*)(CFoo*, int) to
> int (CFoo::*)(int)
> g(boost::function<int (CFoo*, int)>(
> boost::bind(&CFoo::foo2, _1, _2, 666)
> ).target<int (CFoo*, int)>()
> )
> }

I believe there are some compilers where you can do evil ugly hacks so
that you can make a function taking a pointer to an object and n other
arguments pretend to be a member function taking n arguments.

Otherwise there is no solution but to change g.


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