2

似乎在 Lua 中有对数字/布尔值/lightuserdata 的引用之类的东西。但是,在 Lua 中设置指向 C++ 本机类型(例如 float)的全局变量并在我更改 Lua 中相应的全局变量时自动更新的最简单方法是什么?

int foo = 2;
//imaginary lua function that does what I want
lua_pushnumberpointer(state,&foo)
lua_setglobal(state,"foo")
-- later, in a lua script
foo = 5; 

最后一行应该在 C++ 端自动更新 foo 。实现这样的目标的最简单方法是什么?

4

1 回答 1

3

查看元表,尤其是标签__index__newindex.
如果将它们设置为合适的函数,则可以完全控制设置新索引/查询未设置索引时发生的情况。

这应该可以让你做你所要求的一切。

仅设置__newindex为自定义函数并将感兴趣的条目保存在__index.

的示例处理程序__newindex和伴随定义__index
不过考虑在本机方面实现它,以提高性能,并且因为__hidden_notify_world()很可能是本机的。

do
  local meta = getmetatable(_ENV) or {}
  setmetatable(_ENV, meta)
  local backing = {}
  _ENV.__index = backing
  function _ENV:__newindex(k, v)
    if backing[k] ~= v then
      backing[k] = v
      __hidden_do_notify_world(k, v)
    end
  end
end

如果您使用的是 Lua < 5.2 (2011),则必须_G使用_ENV.

于 2014-06-21T20:33:27.660 回答