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[],
Другие вопросы по тегам