override(T)

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Thu Sep 24 06:30:46 PDT 2009


Walter and I discussed last night about contravariance and all and could 
not find a compelling argument in favor of implementing contravariant 
arguments right now. The feature is nontrivial to implement, potentially 
surprising, and has a number of odd corner cases.

One feature that does get requested often in C++ and Java is the ability 
to choose which class/interface contains the method you want to 
override. Consider:

interface Lottery {  void draw();  }
interface Figure {  void draw();  }

class LotterySimulation : Lottery, Figure {
     override void draw();
}

Right now draw() overrides both methods, but you'd want to override them 
separately. You could do so through an intermediate interface:

class Figure2 : Figure {  void draw2() { return draw(); }  }
class LotterySimulation : Lottery, Figure2 {
     override void draw();
     override void draw2();
}

There are a few problems with this, among which the fact that 
LotterySimulation now cannot inherit another class; the one class slot 
was occupied by Figure2.

So I was thinking of this:

class LotterySimulation : Lottery, Figure {
     override(Lottery) void draw();
     override(Figure) void draw();
}

This is easy to implement, scales well, and has good real world uses. 
What say you?


Andrei



More information about the Digitalmars-d mailing list