Bill Baxter wrote: > On Tue, Nov 24, 2009 at 2:49 PM, Saaa <em...@needmail.com> wrote: >> bearophile wrote: >>> Moritz Warning: >>> >>>> If you only what a contract that certain functions are implemented, >>>> then it just need to be implemented in the compiler frontend. >>> >>> In the meantime this can be done with a template mixin, where the >>> template statically asserts the presence of the functions/fields you >>> want. >>> >>> Bye, >>> bearophile >> >> I wanted to do something like this: >> >> class C : I {}; >> struct S : I {}; >> S s; >> I[] i =[new C(), s ]; > > Yeh, that's never going to work because that's acting as a dynamic > polymorphic interaface. Referring polymorphically to a struct like > that pretty much makes it not a struct anymore, and requires having > the hidden pointer to a vtable that was mentioned. That's what > classes are for. > > In D2 you can use "alias this" inside a class to forward things to the > struct, though. Something like this: > > class ClassWrapper(S) : I { > S _impl; > alias _impl this; > } > > But I somehow doubt DMD will consider methods handled by S as being an > implementation of the interface. > So you'll need explicit forwarding. > > --bb
I can confirm that it is not possible with alias this. Somewhat related, template mixins can add virtual methods: template T() { /*implementation of I*/ } class C : I { mixin T!(); } // adds methods in T!() as virtual methods