如何将c++联合暴露给Lua
How to expose C++ unions to Lua
对于我正在进行的一个项目,我需要将另一个库中的一些c++类公开给Lua。不幸的是,这个库中最重要的类之一有许多union和enum (SFML中的sf::Event类),并且通过快速的Google搜索,我发现没有任何关于将c++ union暴露给Lua的内容。我不介意它是否与Lua/C API,库或绑定生成器一起公开,只要它能工作。但是,我不喜欢使用绑定生成器,因为我希望能够在c++中创建对象,然后将该对象的实例公开给Lua(除非使用绑定生成器可能)
对于注册C/c++函数,您需要首先使您的函数看起来像Lua提供的标准C函数模式:
extern "C" int MyFunc(lua_State* L)
{
int a = lua_tointeger(L, 1); // First argument
int b = lua_tointeger(L, 2); // Second argument
int result = a + b;
lua_pushinteger(L, result);
return 1; // Count of returned values
}
每个需要在Lua中注册的函数都应该遵循这个模式。int
的返回类型,lua_State* L
的单个参数。以及返回值的计数。然后,您需要在Lua的注册表中注册它,以便您可以将其公开到脚本的上下文中:
lua_register(L, "MyFunc", MyFunc);
对于注册简单的变量,你可以这样写:
lua_pushinteger(L, 10);
lua_setglobal(L, "MyVar");
之后,您就可以从Lua脚本调用函数了。请记住,在运行带有特定Lua状态的脚本之前,您应该注册所有对象。
在Lua:print(MyFunc(10, MyVar))
结果:20 我想这对你有帮助!
如果你愿意使用boost::variant而不是union,你可以尝试使用我的LuaCast库。
我将尝试添加联合作为基类型
相关文章:
- C++Lua用户数据扰乱了Mathfu浮点值
- 使用 LuaBridge 或 Lua 将对象传递给 Lua 函数C++
- 将 Lua 函数块转换为 C 字符串
- 我可以从 lua 5.0.2 加载用 c++ 编写的 lua 5.3.5 dll 吗?
- 使用 lua 协程 API 和lua_close时出现分段错误
- 使用 C++ 自动 Lua 绑定
- 调用 lua 函数的地址为 C/C++?
- lua 5.0.2 模块和 5.3.5 有什么区别?
- 如何将 Lua 添加到C++项目
- 使用 Lua 中的C++库对象
- 如何在C++中将用户数据从一个 Lua 块传递到另一个块
- 如何使用重新定义的打印函数打印Lua表?
- Lua table in C++ dll
- 在运行时环境中使用 C++ w/ Lua
- 将shared_ptr传递给Lua
- luaL_len is missing in Lua 5.1
- 将向量传递给<struct> Lua 表
- 将 Lua 与 C++ DLL 结合使用
- 如何将c++联合暴露给Lua
- 使用lubridge相对容易地将一些SFML暴露给lua