2014-10-09 2 views
1

Я экспериментирую с интеграцией LUA в мою программу с luabind, но я ударил большой камень преткновения.C++ 11 интеграция luabind, сбой функции

Я очень незнакомый с соглашениями 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) 

Любая помощь очень ценится!

ответ

1

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() 
+0

'приложения: ресурсы(): продувочные()' Теперь дает ошибки времени выполнения 'Luabind: функция property_tag не может быть called'. –

+0

Попробуйте 'app.resources(): purge()'. (Я не могу проверить прямо сейчас.) –

+0

Я получаю ту же ошибку :(Очевидно, мне, возможно, потребуется перестроить библиотеки luabind. (Http://www.gamedev.net/topic/593408-def-readwrite-dosent-work /) Я столкнулся с такими странными ошибками, как простое включение '', заставляющее программу не компилироваться. –

Смежные вопросы