contravariant argument types: wanna?
Walter Bright
newshound1 at digitalmars.com
Wed Sep 23 11:27:35 PDT 2009
Andrei Alexandrescu wrote:
> Walter Bright wrote:
>> Andrei Alexandrescu wrote:
>>> 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.
>>
>> The stumbling block to contravariant parameters (not arguments) is how
>> it throws a monkey wrench into the overloading rules. The problem is
>> deciding if a function overrides or overloads, when its parameter
>> types are different.
>>
>> The current rule is simple: if the parameter types are identical, it
>> overrides. If they are not identical, it overloads.
>
> I don't see that as a huge problem. First off, right now the override
> keyword is required (and for good reason, I might add).
That is a good point.
> Second, the new
> rule is simple: if the overriding function can be called with the
> overriden function's arguments, it is overriding it. True, things get
> more complicated when the base class also defines a corresponding overload:
>
> class A {
> void fun(A);
> void fun(B);
> }
>
> class B : A {
> override void fun(A);
> }
>
> This must be either an error, or the case that B.fun overrides both
> overloads of fun in A.
I would really want to get away from the notion of selecting which
function is overridden based on being a "better" match.
More information about the Digitalmars-d
mailing list