如何将 C++ unions 暴露给 Lua
2015-8-3 20:57:12
收藏:0
阅读:95
评论:2
为了一个我正在开发的项目,我需要将另一个库中的一些C++类暴露给Lua。不幸的是,这个库中最重要的类之一有很多联合和枚举 (来自 SFML 的 sf::Event类),并且从一个快速的谷歌搜索中我发现没有关于将C++联合暴露给Lua的内容。我不介意用Lua/C API、库或绑定生成器来进行暴露,只要它起作用即可。但是,我更喜欢不使用绑定生成器,因为我想能够在C++中创建一个对象,然后将该对象实例暴露给Lua (除非使用绑定生成器能够实现这一点)。
点赞
用户5079510
为了注册 C/C++ 函数,您需要先让您的函数看起来像 Lua 提供的标准 C 函数模式:
extern "C" int MyFunc(lua_State* L)
{
int a = lua_tointeger(L, 1); // 第一个参数
int b = lua_tointeger(L, 2); // 第二个参数
int result = a + b;
lua_pushinteger(L, result);
return 1; // 返回值数量
}
每个需要在 Lua 中注册的函数都应该遵循这个模式。返回类型为 int,单个参数为 lua_State* L,返回值的数量为 1。
然后,您需要将其注册到 Lua 的注册表中,这样您就可以将其公开到脚本的上下文中:
lua_register(L, "MyFunc", MyFunc);
要注册简单的变量,可以编写以下内容:
lua_pushinteger(L, 10);
lua_setglobal(L, "MyVar");
之后,您就可以从 Lua 脚本中调用该函数。请记住,在使用用于注册它们的特定 Lua 状态运行任何脚本之前,您应该注册所有对象。
在 Lua 中:
print(MyFunc(10, MyVar))
结果:
20
我想这可能会对您有所帮助!
2015-08-12 09:52:30
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
如果您愿意使用boost::variant而不是union,您可以尝试使用我的LuaCast库。
我也会尝试将union作为基本类型添加。