Thread overview | |||||||
---|---|---|---|---|---|---|---|
|
July 26, 2007 Satisfying interface requirements | ||||
---|---|---|---|---|
| ||||
Attachments: | 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 |
July 26, 2007 Re: Satisfying interface requirements | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jason House | 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
|
July 26, 2007 Re: Satisfying interface requirements | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jason House | Reply to Jason,
> 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
alias the functions (I think you can even change the name to make it match)
interface I {int foo();}
class C { int bar(){...} }
class D : C, I {alias bar foo;}
|
July 27, 2007 Re: Satisfying interface requirements | ||||
---|---|---|---|---|
| ||||
Posted in reply to Chris Nicholson-Sauls | 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.
|
July 27, 2007 Re: Satisfying interface requirements | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jason House | Reply to Jason,
> 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.
>
could you post code?
what version are you using?
|
Copyright © 1999-2021 by the D Language Foundation