c++ - luabind 和动态属性

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

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

最佳答案

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

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

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

关于c++ - luabind 和动态属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16758445/

相关文章:

c++ - std::vector::push_back 抛出段错误

python - Lua 中是否有 Python 的 defaultdict 功能

c++ - 如何针对自定义 gcc 库强制 cmake 链接

c++ - 如何从 QGraphicsScene/QGraphicsView 创建图像文件?

Lua - 基本函数表

events - 5秒内按任意键

c++ - 在 Lua/Binding 中使用 C++ 函数

c++ - 如何让 Luabind 属性发挥作用?

c++ - 尝试使用 lua 错误调用对象方法时 luabind 中止

c++ - 如何在两个无限循环之间交替?