digitalmars.D - Converting function to delegate - was Re: How to know whether to use function or delegate
- Chris Miller (24/29) Jul 22 2006 But wouldn't it be a lot easier to convert function to delegate? (even ...
- Frits van Bommel (6/7) Jul 22 2006 Ehm, how about this:
- BCS (5/17) Jul 25 2006 for(int i=0; i<0x100000 i++)
- Frits van Bommel (9/29) Jul 25 2006 I believe Chris asked for an /easy/ way, not /the most efficient/ way.
- BCS (8/22) Jul 25 2006 Ah, easy, as in "something simple I can do now, because I need to write
On Sat, 22 Jul 2006 04:16:00 -0400, Walter Bright = <newshound digitalmars.com> wrote:Chris Nicholson-Sauls wrote:(If there is a hack or workaround to pass a delegate as a function =pointer, I want to see that!)The only way to do it is to generate a "thunk" of executable code at =runtime.But wouldn't it be a lot easier to convert function to delegate? (even = without generating anything at runtime?) It seems to me that this is wha= t = most people want. I don't think it would be bad having just the one = conversion for a while (or even forever; delegates just have more = information, you wouldn't provide a thunk to store a long in an int). For example, people ask whether or not to use delegates or function = pointers for callbacks. They want the convenience of delegates, but they= = also don't want to force people to use nested functions or member = functions, but also want to allow using global and static functions. Whe= n = they ask me this question I tell them to go with delegates and give them= = this tip on how to make a "global delegate": struct Dummy { void myfunction() { ... } } Dummy funcs; mydelegate =3D &funcs.myfunction; // <-- Isn't there an easier way to directly convert a function to a delegate?
Jul 22 2006
Chris Miller wrote:Isn't there an easier way to directly convert a function to a delegate?Ehm, how about this: mydelegate = { somethingStatic(); }; Seems pretty easy to me. Gotta love that new delegate syntax. :) Gets a bit uglier once you add arguments though (especially if there are more than a few).
Jul 22 2006
Frits van Bommel wrote:Chris Miller wrote:for(int i=0; i<0x100000 i++) mydelegate(); lot-o-overhead. Copy all args to new stack frame, call-return, etc. Making a re-wrap-args and goto stub will save a bunch of time.Isn't there an easier way to directly convert a function to a delegate?Ehm, how about this: mydelegate = { somethingStatic(); }; Seems pretty easy to me. Gotta love that new delegate syntax. :) Gets a bit uglier once you add arguments though (especially if there are more than a few).
Jul 25 2006
BCS wrote:Frits van Bommel wrote:I believe Chris asked for an /easy/ way, not /the most efficient/ way. If that's your thing though, I also posted some code that does that (for simple cases) in a thread called "Question about x86 delegate calling convention". Google can't find it on digitalmars.com just now (at least not my post), but here it is in the archives of the mailing list gateway at puremagic.com: http://lists.puremagic.com/pipermail/digitalmars-d/2006-July/005584.htmlChris Miller wrote:for(int i=0; i<0x100000 i++) mydelegate(); lot-o-overhead. Copy all args to new stack frame, call-return, etc. Making a re-wrap-args and goto stub will save a bunch of time.Isn't there an easier way to directly convert a function to a delegate?Ehm, how about this: mydelegate = { somethingStatic(); }; Seems pretty easy to me. Gotta love that new delegate syntax. :) Gets a bit uglier once you add arguments though (especially if there are more than a few).
Jul 25 2006
Frits van Bommel wrote:BCS wrote:[...]Frits van Bommel wrote:Chris Miller wrote:for(int i=0; i<0x100000 i++) mydelegate();Isn't there an easier way to directly convert a function to a delegate?Ehm, how about this: mydelegate = { somethingStatic(); };Ah, easy, as in "something simple I can do now, because I need to write the program". Not "how can D be changed to make this fast simple and elegant?" (e.i. fn->dg cast) Man, I've /got/ to quit (hypothetically) solving problems by (hypothetically) changing D. =PMaking a re-wrap-args and goto stub will save a bunch of time.I believe Chris asked for an /easy/ way, not /the most efficient/ way.
Jul 25 2006