2016-07-11 3 views
1

В настоящее время я экспериментирую с библиотекой Luabind, и я наткнулся на его синтаксис вызова. Он ведет себя и работает, как ожидалось, но почему-то я не могу понять, почему и как это делается.
Код в вопросе заключается в следующем:Luabind-подобный синтаксис (оператор индекса)

Class Animation 
{ 
    std::vector frames; 
public: 
    Animation(){} 
    ~Animation(){} 
    addFrame(const Texture2D *in_image); 
}; 

//Somewhere else 
luabind::module(LuaState) 
[ 
luabind::class_("Animation") // < "Animation" how we want to name the Class in the Lua runtime 
.def(luabind::constructor<>())    // < Binds the empty constructor 
.def("addFrame", &Animation::addFrame)  // < Binds the &Animation::addFrame method to lua with the name "addFrame" 
]; 

Чтобы быть более конкретным, я не понимаю, что происходит в квадратных скобках. Почему это работает? Я попытался прочесть исходный код Luabind, к сожалению, безуспешно. Я также попытался восстановить это поведение, что также не увенчалось успехом.
Итак, я пропустил что-то очень очевидное?

Заранее благодарен!

ответ

1
  • luabind::module является функцией, и она возвращает тип luabind::module_, который имеет перегруженный [] оператор берет аргумент типа luabind::scope.
  • luabind::class_ класс и имеет конструктор, который принимает тип const char* и член функции def, которая возвращает class_& так вызовы def могут быть соединены.
  • luabind::class_ является производным от класса под названием luabind::detail::class_base, который является производным от luabind::scope, поэтому окончательное class_ возвращается могут быть преобразованы в scope и передается в качестве аргумента luabind::module_::operator[].
+0

Большое вам спасибо, именно то, что мне нужно! – ChibiX

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