スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Luaのノウハウその3 - luaL_checkudataとその仲間たち

luaL_checkudata,luaL_newmetatable,luaL_getmetatableについて。 これらの関数は、Cのデータ型へのLuaバインディングを書く時に使われる。標準ライブラリではliolib.cとloadlib.cで使われている。 それぞれの関数の使い方については、リファレンスマニュアルにちゃんと載ってるのでそっちを参照。←丸投げ

典型的な使い方

  1. luaopen_xxxでluaL_newmetatableを呼び、メタテーブルを作る。必要なメタメソッドを登録する。
    luaL_newmetatable(L, "MyType"); // 作って
    luaL_register(L, NULL, funcs); // 必要なメタメソッドを登録
  2. 新しくユーザーデータを作る時に、メタテーブルを設定する。
    MyType *p = (MyType *)lua_newuserdata(L, sizeof(MyType));
    luaL_getmetatable(L, "MyType"); // レジストリからメタテーブルをとってきて
    lua_setmetatable(L, -2); // 新しく作ったユーザーデータに設定
  3. C関数中で、ユーザーデータからCポインタを得たい時にluaL_checkudataを呼ぶ。
    static int mytype_hoge (lua_State *L) {
      MyType *p = (MyType *)luaL_checkudata(L, 1, "MyType");
      // pでいろいろ
    }

FAQ

  • Q. スタックの指定した位置にある値が型tnameのユーザーデータかどうか調べたい。luaL_checkudataにエラーを投げさせたくない。
    A. luaL_checkudataのソースコードを参考にして自分で関数を書きましょう。Lua 5.2でluaL_testudataという関数が追加されるまでの辛抱です。
スポンサーサイト

テーマ : プログラミング | ジャンル : コンピュータ

コメントの投稿

非公開コメント

プロフィール

minoki

Author:minoki
好きなプログラミング言語:
Haskell,Lua
GitHubアカウント
Twitter

最新記事
月別アーカイブ
カテゴリ
検索フォーム
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。