虎の巻 - Effective AngelScript
|
| 項目 | AS | C++ |
| クラスを継承したクラスの宣言 | o | x |
| インターフェースを継承したクラスの宣言 | o | x |
| POD型のクラスの宣言 | x | o |
| 値型のクラスの宣言 | x | o |
C++コード上のPOD型のクラスをASにバインドするときはasOBJ_PODをつけるようにしましょう。
ここでいうPOD型とは,メンバ変数にポインタやオブジェクトハンドルを持たない型のことです。
asOBJ_PODをつけるとデフォルトコンストラクタ・代入演算子の定義が必要なくなると共に代入演算関数が自動生成されます。
ASの関数の引数に使われる&in,&out,&inout修飾子は少々癖があります。
これらの使い分けについて理解しておきましょう。
下記の表に各修飾子をつけたときの動作の説明を記述しました。
| 修飾子 | 動作説明 |
| &in | 関数コール時に渡された値が一時変数にコピーされ,関数本体にはコピーされた一時変数の参照が渡されます。 |
| const &in | 関数コール時に渡された参照を,そのまま関数本体に渡します。 |
| &out | 未初期化の一時変数の参照が関数本体に渡されます。 関数の処理が終了するタイミングで,その一時変数の値を関数コール時に渡されたに参照に代入します。 |
| const &out | 動作内容が不明です。 (公式のドキュメントには「この修飾子は役にたたない」としか書かれていない) |
| &inout | 関数コール時に渡された参照を,そのまま関数本体に渡します。 [下記の内容が公式のドキュメントに書かれていますが,最新版ではコンパイルエラーにならないようです。情報が古い?] ただし,内容の書き換えが可能なため,一時変数を渡すことはできません。(コンパイルエラーになります) もし,一時変数を渡したいのであれば,ローカル変数として一度インスタンス化したものを渡してください。 |
| const &inout | 動作内容が不明です。 (公式のドキュメントには「この参照は関数内で変更ができません」としか書かれていない) |
通常使うであろう修飾子は
の3種類です。
(&inは処理パフォーマンスが悪くなるので使うことはないでしょう。)
この3種類の使い方と動作さえ覚えておけばコーディングで困ることはないでしょう。