воскресенье, 13 апреля 2008 г.

Экспорт С++ классов и функций с помощью luabind (общая информация)

Экспорт функций в lua очень прост даже без библиотеки luabind, но классы - это совсем другое дело! Чтобы экспортировать простой класс и его методы из lua в c++, вам придется создать lua-таблицу, которая будет содержать как данные класса, так и методы, которые вам потребуются. Вам придется создать метатаблицу, которая будет определять, как ваш класс ведет себя с операторами == или *. Чтобы экспортировать lua-функцию в c-функцию требуется много времени и сил, а чтобы сделать тоже самое с классом придется потратить гораздо больше ресурсов. К счастью за нас уже сделали тяжелую работу и создали API, который позволяет экспортировать функции и классы без каких-либо трудностей. Этот API называется luabind, и точно так же как и lua является open-source решением, которое можно легко использовать для своей работы.

Luabind - это библиотека, которая позволяет соединять данные между lua и C ++. Это реализовано благодаря использованию мета-программирования. Вы можете можете создавать классы в lua и использовать их в своих c++ программах, а также наоборот.

Чтобы начать использовать luabind, нужно включить заголовочные файлы библиотеки и lua в ваш проект, и затем вызывать функцию luabind::open(lua_State*) для инициализации luabind:


extern "C"
{
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}

#include "luabind/luabind.hpp"

int main()
{
//создание lua state
lua_State* pLua = lua_open();

//инициализация luabind
luabind::open(pLua);

/* регистрация функций и классов в luabind */

/* загрузка и выполение скриптов */

// освобождение ресурсов
lua_close(pLua);

return 0;
}


Для добавление своей функции нужно зарегистрировать ее в окружении luabind, для этого используется luabind::module(pL):


luabind::module(pL)
[
// регистрация классов и функций
];


Этот вызов регистрирует вашу функцию или класс в глобальном пространстве имен. Чтобы указать какое-то другое пространство имен сделайте:


luabind::module(pL, "MyNamespace")
[
// регистрация классов и функций
];


Luabind представляет пространство имен, как таблицу. В данном примере, все функции и классы будут находится в таблице с именем MyNameSpace.

Комментариев нет: