目次

Xdef

Xdef(name, value)

XTAL_BINDマクロのスコープ内で呼び出すことで、AnyPtrへ変換可能な値なら何でもそのクラスにバインドすることができます。クラスにバインドしたいと思うオブジェクトはほとんどの場合他のXdef_*マクロによってバインドすることができるので、あまりお世話になることは無いと思います。

Example

C++

class Foo{
public:
    int var;
 
public:
    Foo(int v) :
        var(v)
    {
    }
 
    void print() const{
        AnyPtr(var)->p();
    }
    static void staticPrint(){
        StringPtr("Foo::staticPrint")->p();
    }
};
 
XTAL_PREBIND(Foo){
    Xdef_ctor1(int);
}
XTAL_BIND(Foo){
    Xdef(print, method(&Foo::print));
    Xdef(sPrint, fun(&Foo::staticPrint));
    // それぞれXdef_method/Xdef_fun_aliasに置き換えることが可能
}
 
void exec_xtal(){
    xtal::global()->def(Xid(Foo), xtal::cpp_class<Foo>());
    Xsrc((
            foo : Foo(10);
            foo.print;
            Foo::staticPrint();
    ))->call();
}

Output

10
Foo::staticPrint