Problem with delegates
Frank Benoit
keinfarbton at googlemail.com
Sun Sep 7 05:48:47 PDT 2008
I haven't tried this, but i think it can work like this:
// in Point
// ctors
this(uint o_x, uint o_y, uint o_z){
super( &comparator );
this.x = o_x;
this.y = o_y;
this.z = o_z;
}
real comparator(){ return cast(real)this.z; }
Zarathustra schrieb:
> Acces violation when I try use delegate function.
>
> module test;
>
> private{
> // tango.io
> import tango.io.Stdout;
> }
>
> // class Drawable << super class >>
> //______________________________________________________________
> private abstract class
> Drawable{
>
> // fields
> protected const real delegate() m_Cmp;
>
> // overloaded operators
> public int
> opCmp(Object o){
> assert(m_Cmp, "Drawable.m_Cmp can not be null!");
> return cast(int)(this.m_Cmp() - (cast(typeof(this))o).m_Cmp());
> }
>
> // ctors
> public
> this(real delegate() o_Cmp){
> m_Cmp = o_Cmp;
> }
> }
>
> // class Point << child class >>
> //______________________________________________________________
> public final class
> Point : Drawable{
>
> // fields
> private double x;
> private double y;
> private double z;
>
> // features
> public void
> Writefln(){
> Stdout.format("x: {}, y: {}, z: {}", x, y, z).newline();
> }
>
> // ctors
> this(uint o_x, uint o_y, uint o_z){
> super( delegate{ return cast(real)this.z; } );
> this.x = o_x;
> this.y = o_y;
> this.z = o_z;
> }
> }
>
> public void
> main(){
> try{
> Point [] l_point_arr;
>
> l_point_arr ~= new Point(0, 1, 2);
> l_point_arr ~= new Point(0, 1, 1);
> l_point_arr ~= new Point(0, 1, 4);
> l_point_arr ~= new Point(0, 1, 5);
>
> foreach(l_point; l_point_arr){
> l_point.Writefln();
> }
>
> Stdout.newline();
> l_point_arr.sort; // use opCmp property
>
> foreach(l_point; l_point_arr){
> l_point.Writefln();
> }
> }
> catch(Object o){
> Stdout.format("Fatal Error: {}", o.toString).newline();
> }
> }
>
> #output#
> x: 0.00, y: 1.00, z: 2.00
> x: 0.00, y: 1.00, z: 1.00
> x: 0.00, y: 1.00, z: 4.00
> x: 0.00, y: 1.00, z: 5.00
>
> Fatal Error: Access Violation
More information about the Digitalmars-d-learn
mailing list