我一直在浏览有关如何将 Ruby 嵌入到 C++ 程序中的教程。我发现了如何通过“rb_define_class”和“rb_define_class_under”定义一个类以及通过“rb_define_method”定义方法。现在我需要一个很好的例子来解释如何用一个用 C++ 编写的 ruby 类来包装一个现有的 C++ 对象(指针)。例子:
class MyClass
{
public:
MyClass();
void MyMethod();
};
VALUE myclass_init(VALUE self)
{
// I'd like to create a new MyClass instance and store its pointer inside "self"
}
VALUE myclass_meth(VALUE self)
{
// Now i need to retrieve the pointer to the object and call its method
}
int main(int argc, char* argv[])
{
ruby_init();
ruby_init_loadpath();
VALUE myclass = rb_define_class("MyWrapperClass", rb_cObject);
rb_define_method(myclass, "initialize", (VALUE(*)(...))myclass_init, 0);
rb_define_method(myclass, "myWrappedMethod", (VALUE(*)(...))myclass_meth, 0);
// Loading ruby script skipped..
ruby_finalize();
return 0;
}
我还需要一种处理垃圾收集的方法,以释放我的包装对象(并做其他事情)。抱歉英语不好,感谢愿意回答这个问题的人!