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