【发布时间】:2021-07-15 02:19:38
【问题描述】:
我刚刚开始深入研究 Lua,并了解到 C++ 对象属性可以通过元表访问。
我正在尝试在游戏脚本中访问此类对象的函数:“GameLib”。它在 Lua 中可用作全局变量,但 getmetatable() 返回 nil:
-- example usage elsewhere in the scripts:
local pPlayer = GameLib.GetLocalPlayer();
-- my tried code:
local mt = getmetatable(GameLib);
print("Metatable type:" .. type(mt)); -- "Metatable type: nil"
可能是什么问题?是否存在 C++ 对象没有元表的情况?如果是这样,还有其他方法可以访问其属性吗?
【问题讨论】:
-
函数
getmetatable可能会被重新定义以故意对您隐藏元表(您创建的元表除外)。 -
你确定
GameLib不只是一张普通的旧桌子吗?你在什么游戏中使用 Lua? -
@EgorSkriptunoff 与仅使用
__metatable(不会让您返回 nil)相比,这有多普遍? -
@JosephSible-ReinstateMonica 你是对的,它确实是一个表,其中函数名是键,并且 - 大多数情况下 - C++ 指针是条目。我不知道可以直接调用函数而无需索引或类似的东西。感谢您的回答!
-
@JosephSible-ReinstateMonica - 有时重新定义一个函数比在 50 个元表中插入额外的字段更容易。
标签: c++ reflection lua metatable