sort
自前のクラスのオブジェクトだと、配列のプロパティのsortが動くような動かないような。
import std.c.stdio; void main(){ Hoge[] hoge = new Hoge[10]; for (int i = 0; i < 10; i++){ hoge[i] = new Hoge(i); } phoge(hoge); hoge[9] = new Hoge(1); hoge.sort; phoge(hoge); hoge[9] = new Hoge(1); hoge.sort; phoge(hoge); } void phoge(Hoge[] hoge){ foreach (Hoge h; hoge){ h.p(); } printf("\n"); } class Hoge{ public: this(int x){ x_ = x; } int x(){ return x_; } void p(){ printf("%d ", x_); } int opCmp(Hoge rhs){ if (x_ > rhs.x){ return 1; } else if (x_ < rhs.x){ return -1; } else { return 0; } } int opEquals(Hoge rhs){ if (x_ == rhs.x){ return 1; } else { return 0; } } private: int x_; }
期待した通りには動かず、結局代入された順に整列されるだけ…?
0 1 2 3 4 5 6 7 8 9 1 8 7 6 5 4 3 2 1 0 1 1 8 7 6 5 4 3 2 1
opCmpもopEqualsもオーバーライドしてるのに。がっかり…