Моя проблема в том, что lua_pcall очищает стек, потому что я хочу повторно использовать стек перед вызовом снова с одним изменением снова.
Есть ли способ либо скопировать весь стек и снова вставить его, либо даже способ вызвать функция lua без очистки стека?
Луа:
function test(a)
print(a)
end
event.add("test", test)
event.add("test", test)
event.call("test", 42)
C++:
int Func_Event_call(Lua_State* L){
//Stack: String:Eventname, Arguments...
std::string name = luaL_checkstring(L, 1);
... Get array functions from name
for(...){
//load function into stack
lua_rawgeti(L, LUA_REGISTRYINDEX, functions[c]);
lua_replace(L, 1);
//Wanted Stack: Lua_Function, Arguments... <- works for the first function
//call function
lua_pcall(L, nummberArgs, 0, 0);
//stack is now empty because of lua_pcall <- problem
}
return 0;
}
pcall
на самом деле не очищает аргументы вашей функции из стека, думайте об этом как о функции, потребляющей их - это просто то, как работает Lua C API. Не путайте со стеком... - person dualed   schedule 24.04.2019