====== 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());
Xsrc((
foo : Foo();
foo.p;
foo.print;
foo.doublePrint;
))->call();
}
==== Output ====
<(instance of lib::builtin::global::Foo)>
foo
foo
foo