如何将一个对象从 C++ 传递到 Lua,以及如何从 Lua 传递回 C++?
2015-10-19 10:3:35
收藏:0
阅读:170
评论:4
我有一个在 C++ 中创建的对象,我想将它传递给 Lua,在 Lua 中我需要获取该对象并将其传递到 C++。
在 C++ 中:
class Measure
{
public:
Measure();
private:
int value;
}
Void PassObjToLua(lua_State *L)
{
Measure *m = new Measure(); // 我需要将这个对象传递到 Lua 中
// 如何实现?
}
Void GetObjFromLua(lua_State *L)
{
// 我需要从 Lua 获取 Measure 对象。如何实现?
}
在 Lua 脚本中:
local measure=nil;
measure= PassObjToLua();
GetObjFromLua(measure);
我需要做什么?
点赞
用户1095108
如Marcus所写,你需要以某种方式使用Lua C API。为了做到这一点,你可以使用C代码生成器或Lua包装器。你可以在lua维基 网站 上看到两者的示例,以及如何编写你自己的Lua包装器的说明。
编辑:为了更详细地回答,你需要将C++类类型的实例表示为一个lua类型的实例。最流行的两个选项是:将C++对象表示为一个lua表或带附加元表的lua用户数据。如果你选择使用lua表,你可以选择填充表中的键,这些键被映射到CFunction s,或者就像使用用户数据一样使用元表。元表允许你挂钩表 / 用户值键访问并在C++中处理它们。
2015-10-20 09:26:28
用户808272
你可以使用 Lua 的轻量级用户数据来实现。在这种情况下,对象由 C++ 管理:
extern "C" int PassObjToLua(lua_State *L)
{
Measure * m=new Measure(); // 我需要将这个对象传递给 Lua
lua_pushlightuserdata (L, m);
return 1;
}
extern "C" int GetObjFromLua(lua_State *L)
{
Measure *m = (Measure*)lua_touserdata (L, 1);
return 0;
}
要在 Lua 上下文中注册您的 C 函数:
lua_pushcfunction (L, GetObjFromLua);
lua_setglobal (L, "GetObjFromLua");
lua_pushcfunction (L, PassObjToLua);
lua_setglobal (L, "PassObjToLua");
2015-10-20 10:57:06
用户752976
我知道的最好的方法是使用 Sol 库,它提供了一个 C++ 接口。
它的 userdata 示例 展示了该库如何用于创建与 C++ 对象关联的表格。
这个回答看起来像是 _仅链接_,但是你只需要一次快速浏览这个库的复杂性,就能意识到这个问题并不是简单的问题,不能用一个简单的答案回答。关于使用 C API 和将其包装在 C++ 基元中存在许多注意事项。
我个人不喜欢基于宏的反射绑定器,建议不要使用这种方法,当然,其他人可能有不同的意见。
2015-10-20 13:04:27
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的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中获取用户配置主目录的跨平台方法
Lualib具有C接口,而不是C ++接口-因此,您必须立即生成'extern C'函数,以便您可以与Lua一起使用。
这里的地方太短了,无法为您提供有关如何使用C ++与Lua或甚至如何使用Lua扩展C程序的完整介绍。我认为,当您使用_google lua c interface_时,您会发现完全符合您需求的教程。
编辑:这是我谷歌搜索的_screenshot_。我们还能更荒谬些吗?