"The last feature": overridable methods in interfaces

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Mon Feb 8 11:36:37 PST 2010


Don wrote:
> Andrei Alexandrescu wrote:
>> Walter has now implemented final methods in interfaces and also 
>> contracts in interfaces, both of which I think are just awesome.
>>
>> We figured that essentially he artificially disallows interfaces from 
>> providing bodies for methods. I think that's a gratuitous limitation; 
>> the only distinguishing quality of an interface is that it has no 
>> state.  Other than that, interfaces can always offer overridable 
>> functions that by default offer functionality in terms of existing 
>> interface functions. For example:
>>
>> interface Stack(T)
>> {
>>     void push(T);
>>     void pop();
>>     @property ref T top();
>>     @property bool empty();
>>     T belowTop()
>>     {
>>         auto t = top;
>>         pop();
>>         auto result = top;
>>         push(t);
>>     }
>> }
>>
>> The default implementation of belowTop does a fair amount of work. A 
>> particular implementation might just use that or override it with a 
>> more efficient implementation.
>>
>> Many more examples can be imagined, but I'm looking for a killer one, 
>> or perhaps a killer counterexample (e.g. when would an 
>> interface-defined method be really bad?)
>>
>> Your thoughts welcome.
>>
>>
>> Andrei
> 
> I don't understand this. How does belowTop() know how to call top()?

It calls top() through the normal interface mechanism. Inside 
belowTop(), this has Stack!T type.


Andrei



More information about the Digitalmars-d mailing list