void rb_define_alloc_func(VALUE klass, VALUE (*func)(VALUE)) { Check_Type(klass, T_CLASS); rb_add_method_cfunc(rb_singleton_class(klass), ID_ALLOCATOR, func, 0, NOEX_PRIVATE); }
void rb_define_private_method(VALUE klass, const char *name, VALUE (*func)(ANYARGS), int argc) { rb_add_method_cfunc(klass, rb_intern(name), func, argc, NOEX_PRIVATE); }
void rb_define_protected_method(VALUE klass, const char *name, VALUE (*func)(ANYARGS), int argc) { rb_add_method_cfunc(klass, rb_intern(name), func, argc, NOEX_PROTECTED); }
void rb_define_method_id(VALUE klass, ID mid, VALUE (*func)(ANYARGS), int argc) { rb_add_method_cfunc(klass, mid, func, argc, NOEX_PUBLIC); }