ゆとりーなの日記

日記的な事を書いて行くと思はれる

関数型に影響された?Cプラーがゲーム製作用ライブラリを製作中ですよ。

現在図形クラスに様々なフィルターをかけて、色を変えたり、動かしたり、回転させたり、拡大させたりするという方式で描画していく仕様で描画していくライブラリを作ってみてるのですが、http://d.hatena.ne.jp/nagoya313/20100423/1272026001において、致命的な面倒臭さが発生したのでどうしたものかということを審議しておりました。テンプレートクラスにおいてテンプレート引数が省略出来ないというものです。最初コンストラクタ的なサムシングでいい感じにオーバーロード呼び出ししてくれるものだと勘違いしていたのが原因です。この毎回テンプレート引数を書くという作業は、フィルターを重ねがけしていくこのライブラリの仕様上致命的な冗長さです。そこで、テンプレート関数であればいい感じにオーバーロード呼び出しをしてくれることを思い出し、フィルター生成テンプレート関数を作ってそいつが良い感じにテンプレート引数を指定してフィルターを生成するようにしたら、毎回テンプレート引数を書くという作業を駆逐することに成功したみたいです。フィルター生成テンプレート関数を作業を行う名前にして、以前のフィルターには_filterを付けることで対応しました。あと、命名規則の最近のマイブームが標準ライクな命名規則なので、全小文字アンダーバーつなぎになっております。

template <typename Drawable>
class move_filter {
 public:
  move_fileter(const Drawable &drawable, float x, float y);
  // 色々
 private:
  const Drawable drawable_;
  // 色々
};

template <typename Drawable>
move_fileter move(const Drawable &drawable, const float x, const float y) {
  return move_fileter<Drawable>(drawable, x, y);
}