[[
XTAL_PREBIND
]]
Xtal Unofficial Wiki
現在位置:
Xtal Unofficial Wiki
»
Xtal Reference
»
XTAL_PREBIND
文書の表示
以前のリビジョン
最近の変更
サイトマップ
ログイン
この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。
====== XTAL_PREBIND ====== <code cpp> XTAL_PREBIND(ClassName); </code> Xtal環境にC++クラスの継承構造やコンストラクタをバインドします。このマクロでバインドしただけではXtalから使うことは出来ず、filelocalやglobal、libといった領域にcpp_class<T>を使ってクラスオブジェクトを定義する必要があります。 実際に内容が実行されるタイミングはXtalの初期化時です。 Xtalに渡すクラスは全てこれを使って登録する必要があり、そうしないと予期せぬ動作をして落ちたりします。 ===== Example ===== ==== C++ ==== <code cpp> class Foo{ public: Foo(){ StringPtr("foo constructed")->p(); } void print(){ StringPtr("foo")->p(); } }; XTAL_PREBIND(Foo){ Xdef_ctor0(); } void exec_xtal(){ xtal::global()->def(Xid(Foo), xtal::cpp_class<Foo>()); Xsrc(( foo : Foo(); foo.p; ))->call(); } </code> ==== Output ==== <code> foo constructed <(instance of lib::builtin::global::Foo)> </code> ===== Notice ===== 実装詳細に依存している注意点ですが、同じクラスのXTAL_PREBINDとXTAL_BINDは ** 同一翻訳単位上で順番に**、かつ、**混在無しに**書く必要があります。 つまり、 <code cpp> // foo.hpp class Foo{}; </code> <code cpp> // bar.hpp class Bar{}; </code> が存在し、FooとBarをバインドしたい場合には、 <code cpp> XTAL_PREBIND(Foo){} XTAL_BIND(Foo){} </code> <code cpp> XTAL_PREBIND(Bar){} XTAL_BIND(Bar){} </code> という順番を崩さずそれぞれ連続して書く必要があります。 XTAL_[PRE]BINDの中身をグローバル静的変数の構築を使って起動時にXtal処理系に登録している関係で、このような仕様となっています。
reference/xtal_prebind.txt · 最終更新: 2012/03/22 22:14 by sukai
文書の表示
以前のリビジョン
文書の先頭へ