如何将一个对象从 C++ 传递到 Lua,以及如何从 Lua 传递回 C++?

我有一个在 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);

我需要做什么?

点赞
用户4433386
用户4433386

Lualib具有C接口,而不是C ++接口-因此,您必须立即生成'extern C'函数,以便您可以与Lua一起使用。

这里的地方太短了,无法为您提供有关如何使用C ++与Lua或甚至如何使用Lua扩展C程序的完整介绍。我认为,当您使用_google lua c interface_时,您会发现完全符合您需求的教程。

编辑:这是我谷歌搜索的_screenshot_。我们还能更荒谬些吗?

谷歌搜索的页面截图 >lua c interface tutorial<

2015-10-19 10:11:53
用户1095108
用户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
用户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
用户752976

我知道的最好的方法是使用 Sol 库,它提供了一个 C++ 接口。

它的 userdata 示例 展示了该库如何用于创建与 C++ 对象关联的表格。

这个回答看起来像是 _仅链接_,但是你只需要一次快速浏览这个库的复杂性,就能意识到这个问题并不是简单的问题,不能用一个简单的答案回答。关于使用 C API 和将其包装在 C++ 基元中存在许多注意事项。

我个人不喜欢基于宏的反射绑定器,建议不要使用这种方法,当然,其他人可能有不同的意见。

2015-10-20 13:04:27