D should have a root interface

Sönke Ludwig ludwig at informatik_dot_uni-luebeck.de
Mon Jul 28 23:38:39 PDT 2008


Robert Fraser wrote:
> Frank Benoit Wrote:
> 
>> // user lib
>> interface List{
>> 	void add(Object);
>> }
>> interface ArrayList : List{
>> 	void add(Object){}
>> }
>>
>> // calling code
>> List list = ...
>> IFile file = ... // interface type
>> list.add( file ); // compile error
>> list.add( cast(Object) file );
>>
>> This makes problems when one want to add() an interface instance. A cast 
>> to Object is necessary. This is so ugly.
>>
>> If there would be at least an empty root interface for all D interfaces, 
>> this can be used for method signatures.
>>
>> // D runtime and used by compiler
>> interface IObject {
>> }
>>
>> // user lib
>> interface List{
>> 	void add(Object);
>> 	void add(IObject);
>> }
>> interface ArrayList : List{
>> 	void add(Object){ ... }
>> 	void add(IObject io){ add(cast(Object)io); }
>> }
>>
>> This would not break any code and helps to make the calling code less casty.
> 
> Or, you know, just make all instances of interfaces that don't extend 
> IUnknown implicitly castable to object.

But what if the object behind the interface is not created from D, but from C++ 
code or anything else? I'd imagine that would be a really nasty pitfall.



More information about the Digitalmars-d mailing list