1

我正在使用 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

任何帮助,将不胜感激。

4

1 回答 1

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 文档调用 luabind::object 。

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

于 2013-10-28T21:02:49.687 回答