contravariant argument types: wanna?

Yigal Chripun yigal100 at gmail.com
Tue Sep 22 21:36:41 PDT 2009


On 23/09/2009 03:07, Andrei Alexandrescu wrote:
> Hello,
>
>
> Today, overriding functions have covariant return types:
>
> class A {
> A clone();
> }
>
> class B : A {
> B clone(); // fine, overrides A.clone
> }
>
> That is entirely principled and cool. Now the entire story is that
> overriding function may have not only covariant return types, but also
> contravariant argument types:
>
> class A {
> A fun(B);
> }
>
> class B : A {
> B fun(A); // fine (in theory), overrides A.fun
> }
>
> Today D does not support contravariant arguments, but Walter told me
> once he'd be quite willing to implement them. It is definitely the right
> thing to do, but Walter would want to see a compelling example before
> getting to work.
>
> Is there interest in contravariant argument types? If so, do you know of
> a killer example?
>
>
> Thanks,
>
> Andrei

consider:

class Car { ... }
class Truck : Car { ... }

class Driver {
     void drive (Car c);
}

class truckDriver : Driver {
     void drive(Truck t); // NOT contra-variant !!
}

does the above design will be affected by your suggestion?



More information about the Digitalmars-d mailing list