如何从Lua安全地调用C ++函数

时间:2018-01-28 16:16:44

标签: c++ lua

我在项目中使用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;。

1 个答案:

答案 0 :(得分:1)

好的,感谢评论和神圣的Sol2文档!

解决方案非常简单明了:您只需要阅读:Sol2 Docs: config and safety。 之后,只需定义您需要的任何触发器,如下所示: #define SOL_SAFE_USERTYPE 1。 您的定义应该在第一位。之后你可以包括sol.hpp:

#define SOL_SAFE_USERTYPE 1
#include "sol.hpp"

这就是你应该做的一切。