Luabind-Like 语法(索引运算符)

我目前正在尝试使用 Luabind 库,并且发现了它的调用语法。它的行为和工作方式与期望的相同,但是我不明白为什么或如何做到这一点。

问题的代码如下:

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

// 在其他地方
luabind::module(LuaState)
[
 luabind::class_("Animation")    // < 我们想要在 Lua 运行时命名类为“Animation”
 .def(luabind::constructor<>())             // < 绑定空构造函数
 .def("addFrame", &Animation::addFrame)     // < 将 &Animation::addFrame 方法绑定到 Lua 并命名为“addFrame”
];

更具体地说,我不明白方括号中发生了什么。这为什么能够工作?我尝试阅读 Luabind 的源代码,但很遗憾并没有成功。我还试图重现这种行为,但也没有成功。

所以,我是否漏掉了什么非常明显的东西?

提前感谢!

点赞
用户481267
用户481267
  • luabind::module 是一个函数,它返回类型为 luabind::module_,该类型有一个重载的 [] 运算符,接受一个类型为 luabind::scope 的参数。
  • luabind::class_ 是一个类,它有一个构造函数,接受类型为 const char* 的参数,以及一个返回 class_& 的成员函数 def,因此可以链接调用 def
  • luabind::class_ 继承自一个名为 luabind::detail::class_base 的类,该类继承自 luabind::scope,因此最终返回的 class_ 可以转换为 scope 并作为参数传递给 luabind::module_::operator[]
2016-07-12 00:14:23