【发布时间】:2014-02-27 15:25:03
【问题描述】:
我正在开发一个 Ruby-C++ 扩展。 我必须在 CPP 类中编写一个非静态方法,我 必须使用类实例在 ruby 客户端中调用该类方法。
以下是main.cpp:
#include "ruby.h"
#include <iostream>
using namespace std;
class Mclass
{
public:
int i;
static VALUE newMethod(VALUE self);
static VALUE newInitialize(VALUE self);
};
VALUE Mclass::newMethod(VALUE self)
{
cout<<"It is newMethod() method of class Mclass"<< endl;
return Qnil;
}
VALUE Mclass::newInitialize(VALUE self)
{
cout<<"It is newInitialize() method of class Mclass"<< endl;
return Qnil;
}
extern "C" void Init_Test(){
VALUE lemon = rb_define_module("Test");
VALUE mc = rb_define_class_under(lemon, "Mclass", rb_cObject);
rb_define_method(mc, "new",
reinterpret_cast< VALUE(*)(...) >(Mclass::newMethod), 0);
rb_define_method(mc, "initialize",
reinterpret_cast< VALUE(*)(...) >(Mclass::newInitialize), 0);
}
以下是 ruby 客户端代码:
require 'Test'
include Test
a = Mclass.new
我能够在 ruby 客户端中获取“Mclass”的实例。但是要在 ruby 客户端中调用类非静态方法。 如何在 CPP 类中添加非静态方法?
【问题讨论】:
标签: c++ ruby ruby-c-extension