View mode: basic / threaded / horizontal-split · Log in · Help
August 28, 2004
get object back from a delegate?
Is it possible to get the object back from a delegate?

ie.

class Monkey
{
  void vomit(float value)
  {
  }
}

Monkey monkeyMan=new Monkey();
void delegate(float value) vomit2;
vomit2=&monkeyMan.vomit;
vomit2(3);

Can I get the 'monkeyMan' object back from the 'vomit2' 
delegate?
August 28, 2004
Re: get object back from a delegate?
Billy Zelsnack wrote:
> Is it possible to get the object back from a delegate?
> 
> ie.
> 
> class Monkey
> {
>   void vomit(float value)
>   {
>   }
> }
> 
> Monkey monkeyMan=new Monkey();
> void delegate(float value) vomit2;
> vomit2=&monkeyMan.vomit;
> vomit2(3);
> 
> Can I get the 'monkeyMan' object back from the 'vomit2' delegate?

Presently, you can only do so with vile trickery:

    union VileTrickery {
        void delegate(float value) asDelegate;
        struct {
            void* instance;
            void* method;
        }
    }

    VileTrickery vt;
    vt.asDelegate = &monkeyMan.vomit;
    Monkey m = cast(Monkey)vt.instance;

This is not guaranteed to be the slightest bit portable.

 -- andy
August 28, 2004
Re: get object back from a delegate?
"Billy Zelsnack" <billy_zelsnack@yahoo.com> wrote in message
news:cgojb7$25hp$1@digitaldaemon.com...
> Is it possible to get the object back from a delegate?

Sure, by using Andy's method. The trouble, though, is there's no type
information for what that object is, and it might not even be an object (if
the delegate was formed from a nested function, the 'object' would be the
stack frame). And worse, if D ever merges the function pointers and
delegates into one type, such code would break.
August 28, 2004
Re: get object back from a delegate?
What are your plans concerning merging fp's and delegates?  It'd be nice.

I apologize if this has been asked and answered before.

John

On Sat, 28 Aug 2004 11:20:31 -0700, Walter wrote:

> 
> "Billy Zelsnack" <billy_zelsnack@yahoo.com> wrote in message
> news:cgojb7$25hp$1@digitaldaemon.com...
>> Is it possible to get the object back from a delegate?
> 
> Sure, by using Andy's method. The trouble, though, is there's no type
> information for what that object is, and it might not even be an object (if
> the delegate was formed from a nested function, the 'object' would be the
> stack frame). And worse, if D ever merges the function pointers and
> delegates into one type, such code would break.
August 29, 2004
Re: get object back from a delegate?
I know how to do it, it just got put off.

"teqDruid" <me@teqdruid.com> wrote in message
news:pan.2004.08.28.19.50.38.110564@teqdruid.com...
> What are your plans concerning merging fp's and delegates?  It'd be nice.
>
> I apologize if this has been asked and answered before.
>
> John
>
> On Sat, 28 Aug 2004 11:20:31 -0700, Walter wrote:
>
> >
> > "Billy Zelsnack" <billy_zelsnack@yahoo.com> wrote in message
> > news:cgojb7$25hp$1@digitaldaemon.com...
> >> Is it possible to get the object back from a delegate?
> >
> > Sure, by using Andy's method. The trouble, though, is there's no type
> > information for what that object is, and it might not even be an object
(if
> > the delegate was formed from a nested function, the 'object' would be
the
> > stack frame). And worse, if D ever merges the function pointers and
> > delegates into one type, such code would break.
>
Top | Discussion index | About this forum | D home