我正在使用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
任何帮助都将不胜感激。
答案 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,并调用它或本机函数。