gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:06:53 31 4
gpt4 key购买 nike

我使用 Sol2在我的项目中,我在从 Lua 运行 C++ 函数时遇到了一些问题。首先,我通过sol::set_function()将一些函数绑定(bind)到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,但出现“找不到类 '',无法解析委托(delegate) 'optional'”。

最佳答案

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

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

#define SOL_SAFE_USERTYPE 1
#include "sol.hpp"

这就是你应该做的。

关于c++ - 如何安全地从 Lua 调用 C++ 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48488460/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com