Le 22/02/2012 03:59, Vladimir Panteleev a écrit :
On Tuesday, 21 February 2012 at 15:41:58 UTC, deadalnix wrote:
Le 21/02/2012 16:32, Vladimir Panteleev a écrit :
On Tuesday, 21 February 2012 at 15:22:15 UTC, deadalnix wrote:
struct stuff {
private Exception delegate() exceptionBuilder = delegate Exception() {
return new Exception("foobar");
};
}

The following piece of code trigger a compiler error : delegate
module.stuff.__dgliteral1 function literals cannot be class members

Why is that ? Is it a bug or a feature ?

Delegates contain a context pointer. Your delegate literal has no
context.

You can't initialize it with the address of a method, either. For struct
methods, the context pointer is a pointer to the structure. You can't
have a .init that contains a pointer to an instance. You probably want
to use a function literal.

It doesn't work with function either.

But I need delegate here. The default one doesn't require a context,
but isn't it possible to pass null as a context, as none is needed ?
This value can be changer later, and definitively require to be a
delegate.

struct stuff {
private Exception function() exceptionBuilder =
&defaultExceptionBuilder;

private static Exception defaultExceptionBuilder() {
return new Exception("foobar");
};
}

This look very promizing !!!

I'll investigate in that direction. Thank you very much for the hint.

Reply via email to