Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Indexing lua/luabind-通过lua添加和覆盖类方法_Indexing_Lua_Meta_Luabind - Fatal编程技术网

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

Indexing lua/luabind-通过lua添加和覆盖类方法,indexing,lua,meta,luabind,Indexing,Lua,Meta,Luabind,我将Lua5.2.2与luabind 0.9一起使用 我希望能够通过Lua为我在C++中绑定的任何类添加其他类方法,但我不确定如何去做。 问题是luabind使用函数作为任何绑定类的_index-metamethod,而不是表,因此我根本看不到访问类方法的方法 e、 例如,我像这样绑定我的类: luabind::module(lua) [ luabind::class_<testClass>("TestClass") .def(luabind::constructor

我将Lua5.2.2与luabind 0.9一起使用

<>我希望能够通过Lua为我在C++中绑定的任何类添加其他类方法,但我不确定如何去做。

问题是luabind使用函数作为任何绑定类的_index-metamethod,而不是表,因此我根本看不到访问类方法的方法

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

luabind::module(lua)
[
    luabind::class_<testClass>("TestClass")
    .def(luabind::constructor<>())
    .def("TestFunc",&TestFunc)
];
//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::object属性并使用luabind的.property方法注册它

大概是这样的:

luabind::module(lua)
[
    luabind::class_<testClass>("TestClass")
    .def(luabind::constructor<>())
    .def("TestFunc",&TestFunc)
];
//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::对象Fn;
void SetFn(luabind::object NewFn)
{
Fn=NewFn;
};
luabind::对象GetFn()
{
返回Fn;
};
};
//绑定代码
luabind::类_u3;(“函数调用方”)
.def(luabind::constructor())
.property(“Fn”,&FunctionCaller::Fn,&FunctionCaller::SetFn,&FunctionCaller::GetFn)
然后您只需要根据luabind文档调用luabind::对象

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