On Thu, 24 Sep 2009 09:30:46 -0400, Andrei Alexandrescu
<seewebsiteforem...@erdani.org> wrote:
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
Umm, but what method would LotterySimulation.draw call? Would it be the
override(Lottery) method or the override(Figure) method?