0

这不是重复的,请阅读全文!

我不确定标题是否正确,但我会在这里更详细地解释。

我有一个带有一些函数、变量和属性的 C++ 类(C++ Builder)。在 Lua 中,我有一个反映变量和属性的简化表。

例子:

class foo {
  private:
    // Other private members and functions

  public:
    int x;
    int y;
    String caption;
};

当我创建类 foo 的实例时,我创建了一个相应的表并将其推送到 lua 全局环境中。我将有一个包含所有实例的全局 Lua 表,但为了简化示例,我们暂时跳过全局表并专注于单个实例。foo 实例的 Lua 表示:

foo = { x, y, caption }

现在是手头的“问题”。在 Lua 中, foo 表只是 C++ 类实例的代理,所以当我在 Lua 中这样做时......

foo.caption = "My caption"

... foo 的 C++ 类实例将设置其变量标题。反过来(Lua)也是如此......

打印(foo.x)

...将打印类实例 foo 的变量 x 的值。

我整天都在谷歌上搜索,大多数示例都使用其他库和包装器,而没有解释其背后的机制。

我知道我需要使用元表和 lightuserdata 但这是否意味着我必须为每个变量定义 getter/setter 并使用 foo.GetX 和 foo.SetCaption 来访问它们?那将是很多getter/setter。

有人可以解释如何在不使用第三方库/源的情况下在 C++/Lua 之间建立这种连接吗?

编辑:更新标题并明确表明这不是@Sombrero Chicken 认为的重复。

4

0 回答 0