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もオーバーライドしてるのに。がっかり…