Xdef_ctor

Xdef_ctor0()
Xdef_ctor1(A0)
Xdef_ctor2(A0, A2)
...
Xdef_ctor13(A0, A2, ..., A12)

XTAL_PREBINDマクロのスコープ内で呼び出すことでそのクラスのコンストラクタをバインドすることができます。Xtal及びバインダはオーバーロードをサポートしていないので、ネイティブコンストラクタが複数あっても1つしか指定できません。

Example

C++

class Rect{
public:
    int x, y, w, h;
 
public:
    Rect(int x, int y, int w, int h) :
        x(x),
        y(y),
        w(w),
        h(h)
    {
    }
 
    StringPtr to_s() const{
        return Xf("Rect(%d, %d, %d, %d)")->call(x, y, w, h)->to_s();
    }
};
 
XTAL_PREBIND(Rect){
    Xdef_ctor4(int, int, int, int);
        Xparam(x, 0);
        Xparam(y, 0);
        Xparam(w, -1);
        Xparam(h, -1);
}
XTAL_BIND(Rect){
    Xdef_var(x);
    Xdef_var(y);
    Xdef_var(w);
    Xdef_var(h);
 
    Xdef_method(to_s);
}
 
void exec_xtal(){
    xtal::global()->def(Xid(Rect), xtal::cpp_class<Rect>());
    Xsrc((
            rect : Rect(w:32, h:32);
            rect.p;
            rect.x = 24;
            rect.y = 16;
            rect.p;
    ))->call();
}

Output

Rect(0, 0, 32, 32)
Rect(24, 16, 32, 32)
reference/xdef_ctor.txt · 最終更新: 2011/09/03 23:58 by sukai
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0