将Lua表连接到C ++类,而不使用第三方库/源

时间:2018-03-11 17:43:28

标签: c++ binding lua c++builder-10.1-berlin

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

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

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

示例:

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

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

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

foo = { x, y, caption }

现在手头有“问题”。在Lua中,foo表只是C ++类实例的代理,所以当我在Lua中执行此操作时...

foo.caption = "My caption"

... foo的C ++类实例将设置其变量标题。 相反的是(Lua)......

打印(foo.x)

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

我整天都使用Google搜索,大多数示例使用其他库和包装器而不解释其背后的机制。

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

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

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

0 个答案:

没有答案