我有以下用 C++ 编写的 lua_CFunction:
int my_function(lua_State* L) {
int x = 0;
try {
x = do_cpp_stuff_that_invokes_lua_API_as_well();
} catch(const std::exception& ex) {
lua_pushstring(ex.what().c_str());
lua_error(L);
}
return x;
}
我的问题如下:是否可以执行 lua_error(L) 或调用任何可能 longjmp 的 lua 函数:
- 在尝试块中?
- 在 catch 块中?
我只通过不分配任何依赖于析构函数(字符串等)的东西来处理分配在堆栈上的变量。如果我需要这样做,那么该范围内的所有 lua 函数都包含在一个 pcall 中,如果该 pcall 失败,则会向我发布的这个函数抛出一个异常。只是我关心的是 try-catch 块。
非常感谢