目次

Xdef_method

Xdef_method(fun)
Xdef_method_alias(name, impl)

XTAL_BINDマクロのスコープ内で呼び出すことでそのクラスのメンバ関数funをバインドすることができます。alias版はnameという名前でimplをバインドします。

ついでにalias版のちょっと特殊な使い方も提示しておきます。

xtal::methodはメンバ関数だけでなく普通の関数も引数に取ることができ、XTAL_BIND内でその関数の第一引数がClassNameの参照やポインタである場合に、そのクラスのメソッドとしてバインドすることができます。これを利用することで、C++ライブラリのクラスなどに新しくメソッドを追加することができます。

Example

C++

class Foo{
public:
    Foo(){
    }
 
    void print() const{
        StringPtr("foo")->p();
    }
};
 
void Foo_doublePrint(const Foo& foo){
    foo.print(); foo.print();
}
 
XTAL_PREBIND(Foo){
    Xdef_ctor0();
}
XTAL_BIND(Foo){
    Xdef_method(print);
    // or Xdef_method_alias(print, &Foo::print);
    Xdef_method_alias(doublePrint, &Foo_doublePrint);
}
 
void exec_xtal(){
    xtal::global()->def(Xid(Foo), xtal::cpp_class<Foo>());
    Xsrc((
            foo : Foo();
            foo.p;
            foo.print;
            foo.doublePrint;
    ))->call();
}

Output

<(instance of lib::builtin::global::Foo)>
foo
foo
foo