主に必要な手続きは以下。
- void *lua_newuserdata (lua_State *L, size_t size)でユーザーデータ用のメモリブロックを確保
- 確保したメモリブロック内に、対象クラスのインスタンスを配置
- Luaスクリプト側に公開するメソッドを__indexメタメソッドへ登録
各ユーザーデータで取り違え(?)が生じないように以下を実施。
識別用のメタテーブルをC++側で設定しておき、Luaスクリプト側へ渡す。
(口述するサンプルコードではメタテーブルに紐づく名前を"person_type"としている)
Luaスクリプト側からユーザーデータを受け取った際(luaL_checkudata呼び出し時)には正しい型か否かを上記メタテーブルを介して検証する。