我正在開發一個Ruby-C++擴展。 我必須在CPP類中編寫非靜態方法,並且我必須使用類實例在Ruby客戶端中調用該類方法。如何在C++類的Ruby-C++擴展中編寫非靜態方法?
以下是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);
}
而且下面是紅寶石客戶端代碼:
require 'Test'
include Test
a = Mclass.new
我能夠在Ruby客戶端獲得 「Mclass」 的實例。但是希望在ruby客戶端中調用類非靜態方法。 如何在CPP類中添加非靜態方法?
謝謝,它的工作 – BSalunke