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[]
,