POV-Ray : Newsgroups : povray.off-topic : Generics annoyance : Re: Generics annoyance Server Time
4 Sep 2024 15:16:15 EDT (-0400)
  Re: Generics annoyance  
From: Darren New
Date: 14 Apr 2010 13:13:21
Message: <4bc5f7b1$1@news.povray.org>
Warp wrote:
>   Then don't make every class inherit from a common base class. Interfaces
> don't, so why should classes?

Because then you can put routines on that common base class that are common 
to every class, like ToString() and Equals() and HashCode() and such.

>   If you really want must have classes inherit from Object, then simply
> allow interfaces to have member variables and function implementations.
> Then you'll have full-fledged multiple inheritance without diamond
> inheritance.

That certainly sounds like a good idea to me. :-)

Of course, the way it works now is that an interface doesn't actually change 
what's in the class. It's more a promise that the class implements a 
particular set of routines. So it's not unlike a pure abstract class. If you 
already implement a routine called Run, whether you inherit from Runnable 
doesn't change what's in your class, only what's in your metadata. So adding 
that feature isn't as much of a no-brainer as it might otherwise be.

On the other hand, maybe it wouldn't be a bad idea to have inheriting from 
an interface actually insert code into your class as necessary. It would 
certainly be a trivial way to make that work in C# at least, if not in other 
languages based on the CIL.

Where have you found multiple inheritance particularly useful in C++? Eiffel 
uses it all the time to good effect in its data structures, but I've never 
really seen anything in C++ that used it, in part maybe because of the way 
it's implemented in C++ with classes nested inside other classes and such 
and not being able to inherit from basic types.

-- 
Darren New, San Diego CA, USA (PST)
   Yes, we're traveling together,
   but to different destinations.


Post a reply to this message

Copyright 2003-2023 Persistence of Vision Raytracer Pty. Ltd.