Documentation of Luabind in Japanese

-1 まえがき

luabindを勉強するためにドキュメントを読んでいるので, 備忘録のために(意訳)日本語を記載する.

0 オリジナル / Source

http://www.rasterbar.com/products/luabind.html

1 導入 / Introduction

LuabindはC++とLuaの架け橋となるライブラリである. C++で記述された関数やクラスなどを,Luaから見えるようにすることができる. また,Luaにおけるクラスの定義や,LuaもしくはC++で記述されたクラスを(Lua側で)派生できるようにする. Luaにおけるクラスの定義では,C++で記述されたクラスの仮想関数のオーバーライドをサポートしている. このドキュメントはLua 5.0を対象として記述されており,Lua 4はサポート外である.

このライブラリはテンプレートメタプログラミングを活用して実装されてい る.つまり,コンパイル前に何かプリプロセスを行う必要がない.(すべてコン パイラが行ってくれる.)また,(大抵の場合は)Lua側に登録した各関数の詳細 な特徴(signature)を知る必要は無く,コンパイル時の関数の型情報に基づいて ライブラリが生成を行う.この方法の主な欠点は,(Luaに)登録を行う必要があ る(関数もしくはクラスが記述された)ファイルのコンパイル時間が増加するこ とである.そのため,単一のcppファイルで必要なすべての登録を行うことを推 奨する.

LuabindはMITライセンスの元でリリースされる.

もしあなたのプロジェクトにluabindを採用された時は,ぜひ我々に 連絡していただけると幸いです.

ヘルプとフィードバックは主にluabind mailing listを介して行われる. また,irc.freenode.netのIRCチャンネル#luabindも活用されたし.

2 機能 / Features

Luabindは以下の機能,

をサポートしている.

3 可搬性 / Portability

Luabindは以下のコンパイラ,

上でテストされている.また, 上では動作しないことが確認されている.

Metrowerks 8.3 (Windows) では,コンパイルはできるがconst-testに失敗する. つまり,constメンバ関数がnon-constメンバ関数として扱われる.

もしここに示されていないコンパイラでluabindを使ったときは,その 結果も含めて教えていただけると幸いである.

4 環境構築 / Building luabind

4.1 必須環境 / Prerequisites

LuabindはBoost 1.34中の多数のライブラリに依存している.. また,ライブラリの構築とテストを行うBoost JamとBoost Build V2にも依存している. Boostはコンパイル済みのbjamバイナリを多数のプラットフォーム上で提供している. もし使用しているプラットフォーム向けのプリコンパイル済みバイナリが 入手できない時は,自分で構築する必要がある.

4.2 Windows

環境変数LUA_PATHが正しくLuaのインクルードディレクトリと構築されたライブラリ のパスに設定されている必要がある. テストスイートを走らせるために, Lua BinariesのWindows x86 DLLとインクルードファイルのパッケージ は最低限用意した方がよい.

4.3 Linux and other *nix flavors

既にLuaがインストールされている場合,ほとんどの場合自動的に 検出され,動作する. もし標準のパス以外にインストールを行った場合,環境変数LUT_PATHが インストール先のプレフィックスを指し示すように設定する必要がある.

環境変数BOOST_ROOTにはBoostのインストール先ディレクトリを設定すること ができる.もし設定しない場合,コンパイラは標準インクルードパスから boostのヘッダファイルを見つけようとする.

4.3.1 MacOSX

もし10.4と10.5の両方のSDKがインストールされている場合,Boost Buildはデ フォルトで10.4の方を使用する.Luaの場合,少なくともMacPortsからインストー ルした場合には10.5 SDKがリンクされることになる.luabindのビルドがリンケー ジエラーで失敗した場合,10.5 SDKを明示的に使用する必要がある.

$ bjam macosx-version=10.5

4.4 Building and testing

5 Basic usage

5.1 Hello world

6 Scopes

7 Binding functions to Lua

7.1 Overloaded functions

7.2 Signature matching

7.3 Calling Lua functions

7.4 Using Lua threads

8 Binding classes to Lua

8.1 Overloaded member functions

8.2 Properties

8.3 Enums

8.4 Operators

8.5 Nested scopes and static functions

8.6 Derived classes

8.7 Smart pointers

8.8 Splitting class registrations

9 Adding converters for user defined types

10 Binding function objects with explicit signatures

11 Object

11.1 Iterators

11.2 Related functions

11.3 Assigning nil

12 Defining classes in Lua

12.1 Deriving in lua

12.1.1 Object identity

12.2 Overloading operators

12.3 Finalizers

12.4 Slicing

13 Exceptions

14 Policies

14.1 adopt

14.1.1 Motivation

14.1.2 Defined in

14.1.3 Synopsis

14.1.4 Parameters

14.1.5 Example

14.2 dependency

14.2.1 Motivation

14.2.2 Defined in

14.2.3 Synopsis

14.2.4 Parameters

14.2.5 Example

14.3 out_value

14.3.1 Motivation

14.3.2 Defined in

14.3.3 Synopsis

14.3.4 Parameters

14.3.5 Example

14.4 pure_out_value

14.4.1 Motivation

14.4.2 Defined in

14.4.3 Synopsis

14.4.4 Parameters

14.4.5 Example

14.5 return_reference_to

14.5.1 Motivation

14.5.2 Defined in

14.5.3 Synopsis

14.5.4 Parameters

14.5.5 Example

14.6 copy

14.6.1 Motivation

14.6.2 Defined in

14.6.3 Synopsis

14.6.4 Parameters

14.6.5 Example

14.7 discard_result

14.7.1 Motivation

14.7.2 Defined in

14.7.3 Synopsis

14.7.4 Example

14.8 return_stl_iterator

14.8.1 Motivation

14.8.2 Defined in

14.8.3 Synopsis

14.8.4 Example

14.9 raw

14.9.1 Motivation

14.9.2 Defined in

14.9.3 Synopsis

14.9.4 Parameters

14.9.5 Example

14.10 yield

14.10.1 Motivation

14.10.2 Defined in

14.10.3 Synopsis

14.10.4 Example

15 Splitting up the registration

16 Error Handling

16.1 pcall errorfunc

16.2 file and line numbers

16.3 lua panic

16.4 structured exceptions (MSVC)

16.5 Error messages

17 Build options

18 Implementation notes

19 FAQ

20 Known issues

21 Acknowledgments

DOHI Keisuke