2011-04-22 75 views
1

我正在为使用Lua的基于Ogre3d的应用程序实现脚本,并且遇到了检查参数是否属于特定类型的问题 - Ogre :: SceneNode *。任何人都知道我该怎么做?如何检查传递给Lua的参数是否是用户定义的类型?

有一些基本的Lua函数可以完成内置类型,如int或string等

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

,但我不知道如何与用户定义类型做到这一点。

回答

1

我猜lua_isuserdata(L, yourParam)

合乎逻辑。

+0

是的创建,使用'lua_islightuserdata()沿' – sbk 2011-04-22 12:18:19

+0

嗯是的,这似乎是正确的,但我怎么能检查它是否是这种特殊类型的数据,以及这个Ogre :: SceneNode是否存在? – Patryk 2011-04-22 12:30:40

+0

@Heandel 好了,我现在得到这样的: '食人魔::场景结点*场景结= dynamic_cast的<食人魔::场景结点*>(lua_touserdata(L,2));' 但我不能做,因为 错误C2681 :'void *':dynamic_cast的无效表达式类型 – Patryk 2011-04-22 12:41:45

2

如果您安排特定类型的每个userdata共享metatable,则可以使用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); 
相关问题