【问题标题】:luabind and dynamic propertiesluabind 和动态属性
【发布时间】:2013-05-26 21:18:43
【问题描述】:

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

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 - 我只在运行时知道的变量名。

【问题讨论】:

    标签: c++ lua luabind


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-30
      • 2012-03-16
      • 1970-01-01
      • 2011-08-30
      • 2012-05-20
      • 2012-07-11
      • 2013-10-15
      • 1970-01-01
      相关资源
      最近更新 更多