1

Luaを使用してOgre3dベースのアプリケーションのスクリプトを実装していますが、関数に入力されたパラメーターが特定のタイプ(Ogre :: SceneNode *)であるかどうかを確認する際に問題が発生しました。誰もが私がそれを行うことができる方法を知っていますか?

intやstringなどの組み込み型に対してこれを行う基本的なLua関数がいくつかあります。

if(lua_isnumber(L,1)) {...}

しかし、ユーザー定義の型でそれを行う方法がわかりません。

4

2 に答える 2

2

userdata特定のタイプのそれぞれがメタテーブルを共有するように手配する場合は、 luaL_checkudataを使用してそれらのタイプを確認できます。これは通常、ライブラリが作成するデータにタグを付けて識別する方法です。

この手法を使用してユーザーデータを作成およびチェックする関数は次のとおりです。

static decContext *ldn_check_context (lua_State *L, int index)
{
    decContext *dc = (decContext *)luaL_checkudata (L, index, dn_context_meta);
    if (dc == NULL) luaL_argerror (L, index, "decNumber bad context");
    return dc; /* leaves context on Lua stack */
}

static decContext *ldn_make_context (lua_State *L)
{
    decContext *dc = (decContext *)lua_newuserdata(L, sizeof(decContext));
    luaL_getmetatable (L, dn_context_meta);
    lua_setmetatable (L, -2); /* set metatable */
    return dc;  /* leaves context on Lua stack */
}

メタテーブルはで作成されました

const char *dn_context_meta = "decNumber_CoNTeXT_MeTA";
luaL_newmetatable (L, dn_context_meta);
于 2011-04-23T02:10:59.960 に答える
1

私は推測しlua_isuserdata(L, yourParam)ますか?

論理的だろう。

于 2011-04-22T12:15:17.617 に答える