Lua checkudata type C++
我到过Google的尽头,然后再次尝试解决此问题。
我有一些从C推送到Lua的userdata对象。
我有一个应该获取2D或3D对象的X值的函数。
当我尝试获取userdata对象时,考虑到它可以是2D元素或3D对象,因此我需要能够为用户选择的X获取X。
这是我尝试的方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | int getX(lua_State* L) { Object3D* a = static_cast<Object3D*>(luaL_checkudata(L, 1,"Object3D")); if (!a) { Object2D* b = static_cast<Object2D*>(luaL_checkudata(L, 1,"Object2D")); if (b) { lua_pushnumber(L, b:getX()); } else { lua_pushnil(L); } } else { lua_pushnumber(L, a:getX()); } return 1; } |
不幸的是,如果userdata类型不是Object3D,它将失败并因lua错误而退出,而无需继续尝试Object2D。
因此,仅当所传递的对象为Object3D类型时,它才能在上面的代码中起作用。
luaL_testudata
void *luaL_testudata (lua_State *L, int arg, const char *tname); This function works like
luaL_checkudata , except that, when the test fails, it returnsNULL instead of raising an error.
您的代码不完整,无法按原样编译,因此我不会费心检查,但如果我没有记错的话,只需将
通过使用rawequal解决方案来查看注册表匹配的类。