【发布时间】:2015-01-14 23:14:24
【问题描述】:
处理嵌套的 lua_CFunction 调用的最佳方法是什么?假设我有两个这样的功能:
static int function2(lua_State *L) {
int i = luaL_checkint(L, 1);
/* do something */
return 1;
};
static int function1(lua_State *L) {
struct udata *u = luaL_checkudata(L, 1, UDATA_METATABLE);
int i = luaL_checkint(L, 2);
/* do something */
/* this does not work, first on call stack is udata, not int */
return function2(L);
};
上面的函数调用不起作用。一种选择是修改function2() 以使用堆栈上的最后一个元素(索引-1),但这通常不是一个解决方案,因为function2() 可能会从具有不同调用堆栈的不同位置调用。
另一种方法是将return function2(L); 替换为
lua_pushcfunction(L, function2);
lua_pushvalue(L, 2);
lua_call(L, 1, 1); /* need to know number of results */
我假设这为function2() 提供了自己的调用堆栈,因此无需修改它。但是这种解决方案对于具有更多参数的函数来说似乎过于复杂,因为它需要将所有参数都复制到堆栈中。
tl;dr:从另一个内部调用lua_CFunction 的推荐方法/好方法是什么?
【问题讨论】: