luabind和动态属性

时间:2013-05-26 10:43:10

标签: c++ lua luabind

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

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;
};

如何将此类绑定到lua,使用luabind或mluabind在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 - 我只在运行时知道的变量名。

1 个答案:

答案 0 :(得分:0)

你可以用Lua metatables做到这一点。

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

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