数字指针

时间:2014-06-21 20:22:05

标签: lua lua-api

似乎在Lua中知道对数字/ boolean / 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。实现这样的最简单方法是什么?

1 个答案:

答案 0 :(得分: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