gpt4 book ai didi

c++ - luabind 和动态属性

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:57:11 27 4
gpt4 key购买 nike

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

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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com