通过lua / luabind添加和重写类方法

我正在使用带有luabind 0.9的lua 5.2.2。

我希望能够通过lua为我绑定的任何类添加附加的类方法,但我不确定该怎么做。

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

例如,我像这样绑定我的类:

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

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

local t = tableOfClassMethods
local r = t.TestFunc -- 对我们绑定的c++函数的引用
t.SomeFunction = function(o) end -- 为该类的所有对象添加新函数
t.TestFunc = function(o) end -- 应覆盖同名的c++函数

任何帮助都将不胜感激。

点赞
用户776222
用户776222

你可以使用 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 文档的方式调用 luabind::object 即可。

虽然这不是你想做的确切操作,但这可能可以帮助你重写该函数。你可以将真正的函数绑定并设置为一个属性,检查 luabind::object 是否为非空,然后调用它或者调用本地函数。

2013-10-28 21:02:49