www.digitalmars.com         C & C++   DMDScript  

D - delegate with null this ?

reply Mike Wynn <mike l8night.co.uk> writes:
Walker is there a way to do ...
	fp = &((cast(foo)null).bar);
where fp is a delegate, foo a class with a member `bar` ?

i.e. end up with a delegate to a member function that will pass null for 
this.
Sep 20 2003
parent Helmut Leitner <helmut.leitner chello.at> writes:
Mike Wynn wrote:
 
 Walker is there a way to do ...
         fp = &((cast(foo)null).bar);
 where fp is a delegate, foo a class with a member `bar` ?
 
 i.e. end up with a delegate to a member function that will pass null for
 this.

As far as I remember, a delegate with this=null will crash (DMD 0.64?). But you can add a dummy this to a function or method pointer. Better be sure it will never use the dummy this. All I know about delegates is in this module: /* ** dg.d ** Copyright (C) 2003 Helmut Leitner ** Donated to Digital Mars. ** Released under the GNU GPL, see LICENSE.TXT ** and http://www.gnu.org/copyleft/gpl.html */ module venus.dg; import venus.all; alias void delegate () void_dg_void; alias void delegate (...) void_dg_ellipsis; alias void (*void_fp_void) (); alias void (*void_fp_this) (void *); alias void (*void_fp_ellipsis) (...); struct DelegateStruct { void *pthis; void (*method)(void *pthis); } class DelegateHacker { static DelegateHacker dh; static void *pthis; void method() { } void set_pthis() { pthis=this; } static this() { dh=new DelegateHacker; dh.set_pthis(); } static void_dg_void FpRetDelegate(void_fp_void fp) { void_dg_void dg; ((DelegateStruct *)&dg).pthis=pthis; ((DelegateStruct *)&dg).method=(void_fp_this)fp; return dg; } } void_dg_void FpRetDelegate(void_fp_void fp) { return DelegateHacker.FpRetDelegate(fp); } void_dg_ellipsis FpRetDelegate(void_fp_ellipsis fp) { return (void_dg_ellipsis) DelegateHacker.FpRetDelegate((void_fp_void)fp); } -- Helmut Leitner leitner hls.via.at Graz, Austria www.hls-software.com
Sep 21 2003