C++ luabind与动力学性质

C++ luabind与动力学性质,c++,lua,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; }; 不是这样的: local my

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

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;
};
不是这样的:

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中的每个表,您都可以提供一个元表,这是一个可以用来重载表的运算符以及它如何访问其成员的表。换句话说,它可以用来提供一种方法,描述当有人试图访问表中的成员时应该发生什么。请参阅,尤其是“表访问元方法”部分

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