D should have a root interface

Robert Fraser fraserofthenight at gmail.com
Tue Jul 29 07:30:46 PDT 2008


Sönke Ludwig Wrote:

> 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.

Fine, extern interfaces also shouldn't cast to object.



More information about the Digitalmars-d mailing list