C++ 调用 Lua : use setField to point itself?

标签 c++ lua

在 C++ 中,事情是这样的:

l_newTable(L);                  //Stack: newtable
l_getGlobal(L, "A");            //Stack: newtable A
l_setfiled(-2, "__index")       //Stack: newtable       => newtable.__index = A

这很正常。但是,如果我想将一个新表的 __newindex 设置为其自身,如何编写代码?它需要自己设置__newindex为newTable,但是使用setfield会调用Pop,也就是说:

l_newTable(L);                 //Stack: newtable
l_setfield(-1, "__newindex")   //Stack: -1              => newtable will pop out

最佳答案

你应该使用 lua_pushvaluenewtable 的值从堆栈中弹出之前复制它:

lua_newTable(L);                 //Stack: newtable
lua_pushvalue(L, -1);            //Stack: newtable, newtable
lua_setfield(-2, "__newindex")   //Stack: newtable  => newtable.__newindex = newtable

关于C++ 调用 Lua : use setField to point itself?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23735475/

相关文章:

c++ - cin.getline 将字符串的开头设置为 '\0'

ssl - 如何在nodemcu lua上使用tls协议(protocol)

c# - 在 C#/.Net 中解析 Lua 数据结构的最简单方法

c++ - lua/C++ 对象与静态成员的绑定(bind)

c++ - 为什么在键类型中使用引用时 lambda 函数在 std::lower_bound 中不起作用?

c++ - 嵌套模板 gcc 编译器 4.1.2 错误

Emacs lua 模式语法高亮显示不起作用

variables - 检测变量的变化并做出相应的响应 [Lua]

c++ - 未定义对 C++ 中析构函数错误的引用?

c++ - 来自新手用户的共享指针查询。当使用带有成员共享指针的类容器时,我有下面的代码崩溃