如何检查传递给Lua的参数是否是用户定义的类型?

时间:2011-04-22 12:08:23

标签: c++ scripting lua ogre

我正在使用Lua为我的基于Ogre3d的应用程序实现脚本编写,我遇到了检查输入函数的参数是否具有特定类型的问题 - Ogre :: SceneNode *。有谁知道我该怎么做?

对于像int或string这样的内置类型,有一些基本的Lua函数可以执行此操作。

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

但我不知道如何使用用户定义的类型。

2 个答案:

答案 0 :(得分:2)

如果您安排特定类型的每个userdata共享元表,则可以使用luaL_checkudata确认其类型。这通常是库标记并标识其创建的数据的方式。

以下是使用此技术创建和检查userdata的一些函数:

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 */
}

metatable是用

创建的
const char *dn_context_meta = "decNumber_CoNTeXT_MeTA";
luaL_newmetatable (L, dn_context_meta);

答案 1 :(得分:1)

我想lua_isuserdata(L, yourParam)

合乎逻辑。