我正在尝试使用luabind将LUA集成到我的程序中,但是遇到了很大的绊脚石。

我对LUA的调用约定非常陌生,觉得缺少一些简单的东西。

这是我的C++代码:

struct app_t
{
    //...
    void exit();
    void reset();

    resource_mgr_t resources;
    //...
};

struct resource_mgr_t
{
    //...
    void prune();
    void purge();
    //...
};

extern app_t app;

还有我的luabind模块:
luabind::module(state)
    [
        luabind::class_<resource_mgr_t>("resource_mgr")
        .def("prune", &resource_mgr_t::prune)
        .def("purge", &resource_mgr_t::purge)
    ];

luabind::module(state)
    [
        luabind::class_<app_t>("app")
        .def("exit", &app_t::exit)
        .def("reset", &app_t::reset)
        .def_readonly("resources", &app_t::resources)
    ];

luabind::globals(state)["app"] = &app;

我可以执行以下lua命令:
app:exit()
app:reset()

但是,以下调用失败:
app.resources:purge()

出现以下错误:
[string "app.resources:purge()"]:1: attempt to index field 'resources' (a function value)

很感谢任何形式的帮助!

最佳答案

When binding members that are a non-primitive type, the auto generated getter function will return a reference to it.

而且,就像app:reset()一样,资源是实例成员字段。

因此,像这样使用它:

app:resources():purge()

关于c++ - C++ 11 luabind集成,功能失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26272193/

10-12 23:52