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