我在项目中使用Sol2,从Lua运行C ++函数时遇到了一些麻烦。首先,我通过sol::set_function()
将一些函数绑定到lua。例如:
我有这个功能:
void PrintInt(int value){
std::cout << "Something" << std::endl;
}
在我的主要内容中我这样做:
int main() {
sol::state state;
state.set_function("PrintInt", &PrintInt);
}
现在,如果我在Lua中调用函数,它可以正常工作。但是我的游戏代码中有一些情况会产生一些意想不到的调用,比如Lua中的这个调用:
PrintInt(nil)
这里的所有代码都是伪代码,所以这并不重要。它可以是,因为Lua脚本是由游戏玩家编写的。所以问题是如何避免这种情况发生?我不想强制玩家写支票等等。
我在加载和运行脚本时使用C ++进行检查,但它并没有向我提供任何错误。我使用sol::protected_function_result
来检查错误。
我尝试使用sol::optional
,但我得到了#34;无法找到课程&#39;&#39;,以解决委托&#39;可选&#39;&#34;。
答案 0 :(得分:1)
好的,感谢评论和神圣的Sol2文档!
解决方案非常简单明了:您只需要阅读:Sol2 Docs: config and safety。
之后,只需定义您需要的任何触发器,如下所示:
#define SOL_SAFE_USERTYPE 1
。
您的定义应该在第一位。之后你可以包括sol.hpp:
#define SOL_SAFE_USERTYPE 1
#include "sol.hpp"
这就是你应该做的一切。