2

我想创建一个具有动态属性的类。例如:

class MyClass
{
public:
    int GetValue(string str)
    {
        return smap[str];
    }
    void SetValue(string str, int i)
    {
        smap[str] = i;
    }

private:

    std::map<string, int> smap;
};

如何使用 luabind 或 mluabind 将此类绑定到 lua 以在 lua 中使用,如下所示:

local myclass a;
a.var1 = 5;
a.var2 = 10;
print(a.var1, a.var2);

不是这样的:

local myclass a;
a.SetValue("var1", 5);
a.SetValue("var2", 10);
print(a.GetValue("var1"), a.GetValue("var2"));

var1, var2 - 我只在运行时知道的变量名。

4

1 回答 1

0

你可以使用 Lua 元表来做到这一点。

对于 Lua 中的每个表,您可以提供一个元表,这是一个可用于重载表的运算符以及它如何访问其成员的表。换句话说,它可以用来提供一种方法来描述当有人试图访问表中的成员时应该发生什么。请参阅PIL中的 Metatables 章节,尤其是它的“Table-Access Metamethods”部分。

在您的情况下,您可以创建两个 C++ 函数,它们将为您的 C++ 类提供读取和写入访问权限。然后,您可以将它们绑定到 Lua 中,并重载您的 Lua 表,以便在您尝试读取表中的值或将值写入表中时调用这些函数。

于 2013-05-26T13:18:43.680 回答