====== XTAL_PREBIND_ALIAS ======
XTAL_PREBIND_ALIAS(ClassName, Name);
[[XTAL_PREBIND]]と基本動作は同じです。違いはC++の//ClassName//をXtal環境に//Name//という名前で登録する点です。これで登録すると、cpp_classをfilelocalなどにdefしなかった場合に例外などが投げられてクラス名が必要となったときなどに使われる名前がaliasのほうに変わります(cpp_classをdefしていた場合はその名前になります)。
===== Example =====
==== C++ ====
class Foo{
public:
Foo(){
StringPtr("foo constructed")->p();
}
void print(){
StringPtr("foo")->p();
}
};
XTAL_PREBIND_ALIAS(Foo, Bar){
Xdef_ctor0();
}
XTAL_BIND_ALIAS(Foo, Bar){
Xdef_method(print);
}
void exec_xtal(){
xtal::global()->def(Xid(Bar), xtal::cpp_class());
Xsrc((
bar : Bar();
bar.p;
bar.print;
))->call();
}
==== Output ====
foo constructed
<(instance of lib::builtin::global::Foo)>
foo