lua / luabind - 通过lua添加和覆盖类方法

时间:2013-10-08 21:22:39

标签: indexing lua meta luabind

我正在使用lua 5.2.2和luabind 0.9。

我希望能够通过lua为我用c ++绑定的任何类添加额外的类方法,但我不确定如何去做。

问题是luabind使用一个函数作为任何绑定类而不是表的__index-metamethod,所以我根本没有办法访问类方法。

例如,我正在绑定我的类:

luabind::module(lua)
[
    luabind::class_<testClass>("TestClass")
    .def(luabind::constructor<>())
    .def("TestFunc",&TestFunc)
];

我基本上想要做的是将lua函数添加到此类的方法列表中,并能够覆盖现有的函数:

local t = tableOfClassMethods
local r = t.TestFunc -- Reference to the c++-function we've bound
t.SomeFunction = function(o) end -- New function for all objects of this class
t.TestFunc = function(o) end -- Should overwrite the c++-function of the same name

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

您可以使用luabind :: object属性并使用luabind的.property方法注册它

这样的事情:

//Class
class FunctionCaller
{
public:
    luabind::object Fn;

    void SetFn(luabind::object NewFn)
    {
        Fn = NewFn;
    };

    luabind::object GetFn()
    {
        return Fn;
    };
};

//Binding Code
luabind::class_<FunctionCaller>("FunctionCaller")
    .def(luabind::constructor<>())
    .property("Fn", &FunctionCaller::Fn, &FunctionCaller::SetFn, &FunctionCaller::GetFn)

然后你只需要根据luabind docs调用luabind :: object。

这不是你想要做的,但它可以帮助你覆盖我认为的功能。你可以绑定真实的函数并拥有一个属性,检查luabind :: object是否为非null,并调用它或本机函数。