コードじぇねれーと

[mixin in C#2.0] [id:yaneurao:20060113]

↑でやねうらおさんがC#2.0でmin-inを実現しています。原理は簡単で、外部ツールによってクラス実装をマージしてやります。マージするときにpartialキーワードを使うところが素敵です。

私も以前C#での2D描画クラスをジェネレートするスクリプトを作成しました。2D描画ではジオメトリ処理(矩形コピーや拡大縮小など)とピクセル演算(単純コピー・加算・減算など)を同時に扱う必要があり、うまい方法を考えないとルーチンの数が極端に多くなります。そこで、cppではテンプレートをフル活用したGTL等の実装があり、cでかかれたSDLではマクロを多用することで問題の解決を図っています。しかし、C#にはマクロはなく、ジェネリックを使ってもインライン展開ができないので、ほとほと困ってしまったわけです。

そこで考えた後、外部スクリプトによるソース自動生成を行いました。「ソースを書き換えるときは生成元を書き換える」ということだけ忘れなければなかなかよい解決方法だと思います(^^

他にもポーティングや.netらしく違う言語で書いてしまうといった方法があります。私はpinvokeにかなり頼ったソースを書いていますが、たまによくわからないエラーが発生したりステップイン不可能なので、ポーティングはあまりやりたくないです。理想は後者だと思うんですが、.netで他言語との提携の仕方がわからないというヘタレゆえの問題があり見送りました。