Is there a way to create compile-time delegates?
Don
nospam at nospam.com
Mon Jul 19 21:51:40 PDT 2010
Philippe Sigaud wrote:
> On Mon, Jul 19, 2010 at 22:01, torhu <no at spam.invalid> wrote:
>
>
>
> I wasn't able to make it work.
>
>
> Me too :(
>
>
> The compiler probably sees delegates as something that just can't be
> created at compile time, since no runtime contexts exist then.
> Which is reasonable.
>
>
> Can you initialize pointers in general, at compile-time?
You cannot initialize a pointer to runtime-allocated data at
compile-time, and will never be able to. This particular example cannot
ever work.
You should be able to initialize pointers to static data at
compile-time, but currently you can't.
>
>
>
> Maybe one of those templates that turn functions into delegates will
> work?
>
>
> I had the same idea and tried to use std.functional.toDelegate, but to
> no avail.
>
> enum moo = () {return 1;};
>
> struct foo {
> int delegate( ) dg = toDelegate(moo);
> }
>
> Error: forward reference to inferred return type of function call
> toDelegate(delegate int()|
>
> int moo() { return 1;}
>
> struct foo {
> int delegate( ) dg = toDelegate(&moo);
> }
>
> Error: forward reference to inferred return type of function call
> toDelegate((& moo))|
>
> 'auto' strikes again :(
> I came to hate these forward reference errors. That and the fact that
> auto functions do not appear in the docs, that's enough for me to avoid
> auto as much as possible for functions.
>
>
>
> Otherwise I guess you're back to using a factory function for
> initializing instances.
>
> Maybe just checking for null pointers before calling those delegates
> ends up being the easiest solution.
>
>
>
> Philippe
>
>
More information about the Digitalmars-d-learn
mailing list