|
Boost Users : |
From: Jaakko Jarvi (jajarvi_at_[hidden])
Date: 2002-08-27 09:15:44
I'm not exactly sure what you are trying to do, but here's some
explanation on bind and ->*
First, The dot operator cannot be overloaded, so you do this:
(_1 ->* &A::GetController).DoSomething
// DoSomething is not defined for (_1 ->* &A::GetController)
The semantics of ->* in general is rather tricky, and the Lambda Library
mimics that:
Here's a snippet of the LL docs:
For a built-in call like this, the result is kind of a delayed
member function call. Such an expression must be followed by a function
argument list, with which the delayed member function call is performed.
For example:
struct B { int foo(int); };
B* b = new B();
...
(b ->* &B::foo) // returns a delayed call to b->foo
// a function argument list must follow
(b ->* &B::foo)(1) // ok, calls b->foo(1)
(_1 ->* &B::foo)(b); // returns a delayed call to b->foo,
// no effect as such
(_1 ->* &B::foo)(b)(1); // calls b->foo(1)
The LL can figure out the return type when binding a pointer to member
function so you do no have to say bind<Controller&>, just bind is enugh.
If you just try to bind a member function call, leaving the object open,
you would write:
bind(&View::GetController, _1);
Could be called as:
View w;
bind(&View::GetController, _1)(v);
Cheers, Jaakko
On Tue, 27 Aug 2002, khuroth wrote:
> whoops, sorry about the typos. any A:: here is really View::
>
> --- In Boost-Users_at_y..., "khuroth" <dansilva_at_l...> wrote:
> > I have a View class that has some widgets, and a Controller class
> > that controls the view, so the View class has a GetController()
> > member function that returns a reference to its controller.
> > When the View's constructor is called, GetController() would
> return
> > a bad ref, but it would return a valid reference by the time a
> > button is clicked... so what I'm trying to do is, inside the View
> > constructor:
> >
> > my_button.on_click = bind( (_1 ->* &A::GetController).DoSomething
> (),
> > this );
> >
> > but that obviously doesn't work... I'm even having trouble just
> > saving the first part:
> >
> > my_button.on_click = bind<Controller&>(_1 ->* &A::GetController,
> > this);
> >
> > also doesn't work...
> > I tried defining the on_click member of the button as a
> > boost::function<void> or a boost::function0<void> in the first
> > example, and a boost::function<Controller&> or
> > boost::function0<Controller&> in the second snip... I get immense
> > compiler errors, so I'm not sure where I messed up.
> >
> > What am I doing wrong?
>
>
> Yahoo! Groups Sponsor
> ADVERTISEMENT
> [ericsson_300x250.jpg]
> Info: <http://www.boost.org>
> Wiki: <http://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl>
> Unsubscribe: <mailto:boost-users-unsubscribe_at_[hidden]>
>
>
> Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service.
>
-- -- -- Jaakko Järvi email: jajarvi_at_[hidden] -- Post Doctoral Fellow phone: +1 (812) 855-3608 -- Pervasive Technology Labs fax: +1 (812) 855-4829 -- Indiana University, Bloomington
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