A renewed call for interface methods with bodies

BCS BCS at pathlink.com
Fri Jan 25 10:54:02 PST 2008


Ary Borenszweig wrote:
> Burton Radons escribió:
> 
>> BCS Wrote:
>>
>>> Burton Radons wrote:
>>> [...]
>>>
>>>
>>> something just occurred to me:
>>>
>>> The only actions that a function body in an interfaces could do to 
>>> "this" is function calls that would have to be virtual (or how could 
>>> it ever do anything) however the code generated for a interface 
>>> method needs to know the type of the object to be able to make the 
>>> calls correctly. The only reasonable way I can see to let interface 
>>> functions have bodies would be to in effect use a mixin.
>>>
>>> Can anyone think of a better solution?
>>
>>
>> There aren't any problems in compiling interface methods with bodies - 
>> it's exactly the same as a class with abstract methods.
> 
> 
> Doesn't that lead to multiple inheritance, with all its complexities?

I think it would be more complex than the current implementation but not 
that complex.

The issue is that with the current interfaces, the function pointers in 
the interface v-tbl are specific to the class that implements the 
interfaces. This results in the code expecting the this pointer to point 
to the start of the object where the class v-tbl is (or there abouts). 
For the proposed interfaces to work simply, the this pointer inside the 
un-overloaded function would have to point to the interface v-tbl (which 
IIRC is not at the start of the object, but inside overloaded functions, 
it would have to point the the start of the object. I can't think of any 
simple way to make this work.

I'll grant it can work, I expect it would be somewhat complex though.



More information about the Digitalmars-d mailing list