====== XTAL_BIND ====== XTAL_BIND(ClassName); C++クラスのメンバをバインドします。 内容が呼び出されるのはバインドされたクラスがXtalスクリプトによって生成されるときです。下の例で言えば > foo : Foo(); の部分ですね。 ===== Example ===== ==== C++ ==== class Foo{ public: Foo(){ StringPtr("foo constructed")->p(); } void print(){ StringPtr("foo")->p(); } }; XTAL_PREBIND(Foo){ Xdef_ctor0(); } XTAL_BIND(Foo){ Xdef_method(print); } void exec_xtal(){ xtal::global()->def(Xid(Foo), xtal::cpp_class()); Xsrc(( foo : Foo(); foo.p; foo.print; ))->call(); } ==== Output ==== foo constructed <(instance of lib::builtin::global::Foo)> foo ===== Notice ===== 実装詳細に依存している注意点ですが、同じクラスのXTAL_PREBINDとXTAL_BINDは ** 同一翻訳単位上で順番に**、かつ、**混在無しに**書く必要があります。 つまり、 // foo.hpp class Foo{}; // bar.hpp class Bar{}; が存在し、FooとBarをバインドしたい場合には、 XTAL_PREBIND(Foo){} XTAL_BIND(Foo){} XTAL_PREBIND(Bar){} XTAL_BIND(Bar){} という順番を崩さずそれぞれ連続して書く必要があります。 XTAL_[PRE]BINDの中身をグローバル静的変数の構築を使って起動時にXtal処理系に登録している関係で、このような仕様となっています。