Satisfying interface requirements

Jason House jason.james.house at gmail.com
Thu Jul 26 20:11:56 PDT 2007


Chris Nicholson-Sauls wrote:
> Jason House wrote:
>> Attached is a simple example that demonstrates my problem (with dmd 
>> 1.018).  It seems like inheriting from a class that contains functions 
>> that would satisfy an interface does not work.  Usually, I work around 
>> this by just adding a manual call to super's copy.  Unfortunately, 
>> this only works if super's member function is not final.  Any tips on 
>> how to work around this?
>>
>> If line 7 is commented out:
>> test.d(6): class test.foo interface function bar.start is not implemented
>>
>> If line 7 is present:
>> test.d(7): function test.foo.start cannot override final function 
>> tango.core.Thread.Thread.start
> 
> The standard technique is to use an alias, like so:
> 
> interface Foo {
>   int bar();
> }
> 
> class A {
>   int bar();
> }
> 
> class B : A, Foo {
>   alias A.bar bar;
> }
> 
> Although, personally, I'm not entirely satisfied with this.  I would 
> think checking for interface implementation warrants a look up the 
> inheritance chain.  I think there was a reason given in an older 
> discussion, but darned if I can remember it now.
> 
> -- Chris Nicholson-Sauls


For whatever reason, that trick didn't work for me.  I got the same 
error as if I hadn't had the alias in there at all.


More information about the Digitalmars-d-learn mailing list