delegate bug?
Timon Gehr
timon.gehr at gmx.ch
Fri Nov 9 12:22:39 PST 2012
On 11/09/2012 09:13 PM, Jack Applegame wrote:
> Ok. I will try to explain what exactly i need.
>
> ...
The following works. You can also use a (scoped) delegate in order to
allow the caller to close over his context.
import std.stdio;
class Figure {
void draw(){}
void erase(){}
}
class Circle : Figure {
override void draw() { writeln("drawing circle"); }
override void erase() { writeln("erasing circle"); }
}
class Square : Figure {
override void draw() { writeln("drawing square"); }
override void erase() { writeln("erasing square"); }
}
class Triangle : Figure {
override void draw() { writeln("drawing triangle"); }
override void erase() { writeln("erasing triangle"); }
}
void main() {
Figure[] figures;
createFigures(figures);
doAction(figures, x=>x.draw());
doAction(figures, x=>x.erase());
}
void doAction(Figure[] figures, void function(Figure) action) {
foreach(Figure figure; figures) {
action(figure);
}
}
void createFigures(ref Figure[] figures) {
figures ~= new Circle;
figures ~= new Square;
figures ~= new Triangle;
}
More information about the Digitalmars-d-learn
mailing list