类似Luabind的语法(索引运算符)

时间:2016-07-11 23:49:51

标签: c++ c++11 lua luabind

目前正在尝试使用Luabind-Library,我偶然发现了它的调用语法。它表现得像预期的那样,但不知怎的,我无法理解它为什么或如何做 有问题的代码如下:

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 个答案:

答案 0 :(得分: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[]的参数。