Re: [Boost-users] Bind, lambda and how to chain relative function calls

Erratum : Please replace ReturnArg by AdaptToReturningFunction in the AdaptToReturningFunction class definition. JK -----Original Message----- From: boost-users-bounces@lists.boost.org [mailto:boost-users-bounces@lists.boost.org] On Behalf Of Kerner, Jacques Sent: Thursday, November 24, 2005 4:54 PM To: boost-users@lists.boost.org Subject: Re: [Boost-users] Bind,lambda and how to chain relative function calls Hi, My example got a little bit more complicated. The Car::GetRigidBody function is : void Car::GetRigidBody(RigidBody & rb) instead of RigidBody & Car::GetRigidBody() So I have to write : bind ( &Position::GetX, bind ( &RigidBody::GetPosition, AdaptToReturningFunction<RigidBody>(bind(&Car::GetRigidBody, &car)) ) ) With a functor named AdaptToReturningFunction that transforms the first signature to the second : template<typename T> class AdaptToReturningFunction { public: ReturnArg(boost::function<void (T &)> f) : mF(f) {} T operator()() {T t; mF(t); return t;} private: boost::function<void (T &)> mF; }; Is there a simpler and better way of doing it without having to define AdaptToReturningFunction ? What if RigidBody was purely abstract (interface) ? Thank you. Jacques Kerner. -----Original Message----- From: boost-users-bounces@lists.boost.org [mailto:boost-users-bounces@lists.boost.org] On Behalf Of Peter Dimov Sent: Thursday, November 24, 2005 3:41 AM To: boost-users@lists.boost.org Subject: Re: [Boost-users] Bind,lambda and how to chain relative function calls Kerner, Jacques wrote:
Hi,
I would like to create a functor for calling functions in a chain like
this :
car.GetRigidBody().GetPosition().GetX()
What is the best way to do that using bind (and lambda ?)
The car.GetRigidBody() is easy : bind(&Car::GetRigidBody, &car) , but then I am a bit stuck. Note that I don't want to store the result of car.GetRigidBody(). I want the final functor to call all the functions
everytime its operator() is called. So
bind ( &Position::GetX, &bind ( &RigidBody::GetPosition, &bind (
&Car::GetRigidBody, &car )() )() )
would not be acceptable...
Just drop the invocations: bind ( &Position::GetX, bind ( &RigidBody::GetPosition, bind( &Car::GetRigidBody, &car) ) ) _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
participants (1)
-
Kerner, Jacques