From: Masahiro S. ()
<sa...@to...> - 2007-07-15 14:51:36
|
酒井です。 From: Masao Mutoh <mu...@hi...> Date: Sun, 15 Jul 2007 22:57:07 +0900 > むとうです。 > > On Sun, 15 Jul 2007 15:57:51 +0900 (JST) > Masahiro Sakai (酒井政裕) <sa...@to...> wrote: > > > 酒井です。 > > > > Ruby/GTKをGTK+-2.2環境で動作確認をしていたのですが、 > > > Gdk::GC.newで、"abstract class"というTypeErrorが > > > 出てインスタンスが生成できないことがわかりました。 > > > #このエラーはgobj_s_allocate()が出します。 > > > > とはいえ、このままだとGdk::GC.newを生成できないので、 > > > glib/src/rbgobj_object.cに以下の関数を追加しました。 > > > > > > void rbgobj_abstract_but_create_instance_class(gtype); > > > > > > ここで登録しておいたクラスはG_TYPE_FLAG_ABSTRACTであっても > > > allocateできるようになります。 > > > > > > とりあえず、Ruby-GNOME-0.3はこれで行きたいと思いますが、 > > > 別の良案があれば教えてください。 > > > > これなのですが、rbgobj_abstract_but_create_instance_class は廃止して、 > > とりあえず常に allocate 出来るようにしようかと思います。 > > > > というのも、rbgobj_abstract_but_create_instance_class で指定する方式だ > > と、gtk側の実装(≠仕様)が変わるたびに対応が必要になってしまうためです。 > > それって、AbstractなクラスであってもFoo.newができる、ということでしょうか。 > だとしたら現状のまま(Abstractなクラスはnewできない)の方が良いような気がします。 そうです。 ただ、Abstractなクラスに対しては Foo#initialize を自動的に定義して、 そっちでエラーにするということは出来るでしょうけど。 > gtk側の実装が変わるたびに従わなければいけない、というのはしょうが > ないといえばしょうがないわけですし。 それを仕方がないと言ってしまうのには、かなり抵抗があります。 gtk側の「仕様」が変更されたのなら仕方がないですが、内部の実装が変わった くらいで正しく動作しなくなったり、変更が必要になったりというのでは、と ても dependable なソフトウェアとは言えないのではないでしょうか? -- 酒井 政裕 / Masahiro Sakai |