delegate as memeber

deadalnix deadalnix at gmail.com
Wed Feb 22 03:42:44 PST 2012


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.


More information about the Digitalmars-d-learn mailing list