Monthly Archives: 9月 2006

2006-09-30

画像ライブラリのテンプレート化の推進

テンプレート化されている部分とそうでない部分がごちゃごちゃになっている現状をなんとかしようとプログラムを変形中。こういうのを放置していると拡張するのがだんだん嫌になってくるので。

テンプレート化はコンパイラが最適化しやすく、かつ、一般的な形を見つけるのがなかなか難しい。生成されたコードを見ると無駄な一時オブジェクトのロード/ストアが残っていたりしてムカッとくる。

2006-09-29

うみゅー

うわーん、もう疲れたヨー。目が痛いヨー。もうディスプレイなんて見たくないヨー。指も痛いヨー。頭がボーっとするヨー。

………、あーあ、仕事しよう。

2006-09-29

ユーザーインタフェース

kuiライブラリ(カスタマイズ可能なUIライブラリ)が気に入らない。何が気に入らないかって言うと……、まあ、面倒だから以下略。いや、細かいところが色々気に入らないのだけど。詳しいところはまだよく分かっていないし。週末直すことにしよう。

2006-09-27

イベント配信とオブジェクトの寿命

今使っているイベント配信機構がもうずっと長いこと気に入らない。何が気に入らないかって言うとイベントリスナー(ハンドラ)登録部分。いちいちリスナーインタフェースから継承して、オーバーライドするのが面倒。なのでメンバ関数ポインタ呼び出しをヒープへの割り当て無しでラッピングするテンプレートクラスを書いて(boost::functionに効率の良いallocatorを指定する方が良いかどうか迷った)、それをリスナー登録の時に使おうとしたのだけど、実はリスナーインタフェースの基底クラスはデストラクタで自分宛のメッセージをキューから削除する処理を行っているんだった。ダメじゃん。デストラクタにその処理を行う関数呼び出しを毎回書くとか、それだけのために何かを継承するのだったら今までと変わらないよ。むしろ忘れる危険性があるし。それだったら今までの方がシンプルで効率も良く、安全だ。別に自由なメンバ関数を呼んでもらえないことが困るってほどでもないし。ということでせっかく書いたテンプレートクラスはお蔵入りです。時間を無駄にした。いや、勉強になった。

結局このあたりはオブジェクトの寿命管理の呪縛から逃れられないんだよね。イベントをきっかけにイベントハンドラになっているオブジェクトを削除するなんて事は良くあるわけだし。boost::signalですらtrackableを必要とする。さらにイベントハンドラがイベント発生元を削除したいケースも良くある。GCがあれば何て事は無いんだろうけどなぁ。侵入型の参照カウンタで自分自身をロックするくらいでも何とかなる?

ちなみにQtだとこんな感じらしいです。つまりはイベントの通知は自分が削除されても良いタイミングで行え、それが出来なければタイマーか何かで遅延するか、自分が削除されたことを検知せよ。頭痛い。いや、興味深い。