Method pointers are *function* pointers?? Or delegates??

Jacob Carlborg doob at me.com
Tue May 22 12:04:21 PDT 2012


On 2012-05-22 20:35, Steven Schveighoffer wrote:

>> It needs to be possible to compose delegates:
>>
>> class Foo
>> {
>> void foo () {};
>> }
>>
>> void delegate () dg;
>>
>> dg.funcptr = &Foo.foo;
>
> Error, cannot cast function of type void function(Foo this) to void
> function(void *this)
>
> dg.funcptr = cast(void function(void *this))&Foo.foo; // ok
>
>> dg.ptr = cast(void*) new Foo;
>> dg();
>>
>> At least it needs to be possible to do that in code marked with @system.
>>
>
> I think it should require a cast, regardless of the @system attribute,
> you are telling the type system a function that requires a Foo is now OK
> to accept a void *. I don't think that's something we should accept
> implicitly.
>
> -Steve

I have no problem with a couple of case, as long as it's possible to 
compose delegates as above. The example was just how it works today, and 
an explanation of what I meant by "composing delegates". This can be of 
great help when interfacing with other language. I used this technique 
to call D methods from Objective-C.

-- 
/Jacob Carlborg


More information about the Digitalmars-d mailing list