タグ

ブックマーク / ktaobo.blogspot.com (2)

  • C++用のmrubyの関数バインダを作った

    mrubyに任意の型のC言語の関数を登録するためのバインダを作りました。 mrubybind - Binding library for mruby/C++ 使い方は簡単で、mrubybind.hをインクルードしてMrubyBindというクラスのインスタンスを生成する。そして、あるC言語の関数foobarがあったとき、 #include "mrubybind.h" void init(mrb_state* mrb) { mrubybind::MrubyBind b(mrb); b.bind("foobar", foobar); } とすれば、mrubyからその登録した名前で呼び出すことができる。mruby側から渡した引数が自動的にCの関数に渡り、その関数からの戻り値がmruby側に戻る。関数をバインドした後はMrubyBindのオブジェクトは捨ててしまってokです。 以下は実装の説明。 m

  • mrubyにC++のクラスを持ち込む

    C++側で定義されているクラスをmrubyに持ち込む方法を調べた。参考にしたのはmruby-time/time.cやmruby/C構造体組み込みを読む - Code Reading Wiki。正しいかどうかは保証できないけれど、一応ちゃんと動いているようです。 C++側になにかクラス class Hoge { public: Hoge(int x) : x_(x) { std::cout << "Hoge::ctor()" << std::endl; } virtual ~Hoge() { std::cout << "Hoge::dtor()" << std::endl; } int x() const { return x_; } private: int x_; }; があったとして、これをmruby側から扱いたい場合には、DATA型を使うといいようだ: #include <mruby

  • 1