我想创建一个具有动态属性的类。例如:
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 - 我只在运行时知道的变量名。
答案 0 :(得分:0)
你可以用Lua metatables做到这一点。
对于Lua中的每个表,您可以提供一个metatable,它是一个可用于重载表操作符的表,以及它如何访问其成员。换句话说,它可以用于提供一种方法,该方法描述每当有人试图访问表内成员时应该发生什么。请参阅Metatables chapter in PIL及其“Table-Access Metamethods”部分。
在您的情况下,您可以创建两个C ++函数,这些函数将提供对C ++类的读取和写入访问。然后,您可以将它们绑定到Lua中,并重载您的Lua表,以便在您尝试读取表中的值或向其中写入值时调用这些函数。