作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想问一个关于其中发生的特定事件的问题,而无需深入探讨我正在从事的大型 multimap 书馆项目的太多无关细节。我正在使用 Luabind 使我的 C++ 代码与我的 Lua 代码接口(interface),并且我有一个具有继承性的类结构,如下所示:
GuiWidget
GuiButton : GuiWidget
我已经通过 Luabind 向 Lua 注册了这两个类。然后我执行以下操作,其中 widget
是指向 GuiWidget
类实例的指针:
lua_newtable(luaState);
luabind::object(luaState, widget).push(luaState);
lua_setfield(luaState, 2, "widget");
lua_setglobal(luaState, "event");
//This line connects to some other code I wrote that just executes a file and handles errors.
luaMachine->doFile(widget->getUserString("eventMouseButtonClick"));
lua_pushnil(luaState);
lua_setglobal(luaState, "event");
现在,同样的代码片段可以处理从按钮到滚动条甚至整个窗口的任何内容。因此,稍后在 lua 代码中,当单击复选框按钮时,我调用了这行代码:
event.widget:setSelected(not event.widget:getSelected())
这行得通。即使通过的指针是一个 GuiWidget
指针,lua 代码以某种方式知道为这个特定实例使用 GuiButton
类独有的功能。它是如何做到的?它如何获取小部件指针并自动知道特定小部件是一个按钮?我不相信这是可能的,所以我花了一段时间才找到那个解决方案,但我想我会在黑暗中试一试,它以某种方式奏效了。
最佳答案
你已经问了很长时间了,但我可能对此有答案......
使它起作用的最后一个有趣的信息是,Lua 端的所有指针都像这样存储:dynamic_cast(ptr) 稍后允许从它自动转换到其他使用先前方法验证的类和 class_rep 中的继承信息
这就是这种隐式转换在 luabind 库中的大致完成方式。
关于c++ - luabind 如何隐式转换对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27387657/
我是一名优秀的程序员,十分优秀!