こんにちは、なかむら(う)です。

In message "[ruby-ext:02312] 拡張ライブラリでの継承について"
    on Jun.29,2006 23:11:11, <fuj / rabbix.jp> wrote:
| と出てしまいます。このソースを参考にと言うことでも構いませんので、
| 教えて頂けませんでしょうか。

アロケータを定義する場合、本来ご先祖様がやるはずのアロケーシ
ョン処理もちゃんと肩代わりしてあげないといけません。たぶん。
そういうことを考え始めるとめんどくさいので、シンプルに(非公開
の)インスタンス変数として保持しちゃダメですか。


#include <ruby.h>

VALUE rb_cPerson;

VALUE Person_view(VALUE self){
  VALUE name = rb_iv_get(self, "name");
  printf("%s\n", StringValuePtr(name));
  return(self);
}

VALUE Person_initialize(VALUE self,VALUE name,VALUE family){
  /* check type*/
  Check_Type(name,T_STRING);
  Check_Type(family,T_STRING);
  rb_iv_set(self, "name", name);
  rb_iv_set(self, "family", family);
  return(Qnil);
}

void Init_Jikken(VALUE val){
  rb_cPerson = rb_define_class("Person", rb_cArray);
  rb_define_private_method(rb_cPerson, "initialize", Person_initialize, 2);
  rb_define_method(rb_cPerson, "view", Person_view, 0);
}


それでは。
-- 
U.Nakamura <usa / garbagecollect.jp>