データとかアルゴリズムとかポリシーとかの分離とか

最近の

http://d.hatena.ne.jp/w_o/20060613#p2

のあたりは私も色々考えたことがあるのですが、おっしゃってる通り C++ だと template の限界が来るのと、あと、コンパイルおっせー、っていう理由でまぁ色々 GameObj から継承したらいいじゃんとかそういう日和りが起きてきます。

というかゲームと STL のデータとアルゴリズムの分離チックな template の用法は相性が良さそうでどうも悪いというか…

D だとどう見てもマクロですありがとうございましたな mixin を使うのが私的に好みです。普通、クラスが決まればアルゴリズムは一つに決まりますし。 Web に上がってる範囲だと、 PSYNO の objspec.d あたりがたぶん wo さんがやりたいことを D でやってみたチックな感じじゃないかと(ぜんぜん徹底されてませんが)。

template getMemberDX() {
    typeof(dx) getMemberDX() {
        return dx;
    }
}
template getIdoukyoriDX() {
    typeof(idou_kyori_x()) getMemberDX() {
        return idou_kyori_x();
    }
}

class Meteorite{
    mixin getMemberDX;
    float x; float y; float dx; float dy;
}
class SpaceShip{
    mixin getIdoukyoriDX;
    float x; float y; int dx_; int dy_;
    int idou_kyori_x() {
        return dx_;
    }
}

int main() {
    Meteorite m = new Meteorite();
    SpaceShip s = new SpaceShip();
    m.dx = 1;
    s.dx_ = 2;
    printf("%f %d\n", m.getMemberDX(), s.getMemberDX());
    return 0;
}

typeof あるんで template でもできるかと思います。ていうかどうせ C++0x には入るでしょうし、どうせ GCC なんで、 typeof 使っちゃえ、という話も。

あと C++ だとあとは多重継承という武器もあるのですが、ヘタに型チェックとかやられてしまうのがあまり嬉しくないというか、マクロでいいよもう、というか。

なにかあれば下記メールアドレスへ。
shinichiro.hamaji _at_ gmail.com
shinichiro.h