C++でClass#allocateを登録する
- Ruby 1.8.7 p72
VALUE rb_cUserDefined; /* … */ VALUE your_class_singleton_allocate(VALUE klass) { VALUE allocated; /* … */ return allocated; } /* … */ #ifdef __cplusplus extern "C" { #endif void Init_your_ext(void) { /* … */ rb_cUserDefined = rb_define_class("YourClass", rb_cObject); /* … */ rb_define_alloc_func(rb_cUserDefined, reinterpret_cast<VALUE (*)(VALUE)>(your_class_singleton_allocate)); /* … */ } #ifdef __cplusplus } #endif
型名の解決が良く分からないけど…色々やってみた結果「VALUE (*)(VALUE)」が通った.
ちなみに「rb_define_alloc_func」はintern.h(実装はeval.c)で定義されていた(最初からこちらを見ればよかったけど,ruby.hに無かったのでトライ&エラーを優先して探すのを後回しにした).
allocateはインスタンスを生成するクラスの特異メソッドらしく,生成されたメソッドは特徴を持たない = 初期状態?であるべきのようだ.