因此,我仍在为这个学校项目开发一个灵活的脚本系统,并且已经到了一个路障。问题是:我有一个脚本状态管理器接口,任何脚本状态将实现(当前实现lua,但希望以后能够添加python)。它具有用于诸如DoFile,DoString,RegisterObject和RegisterFunction之类的纯虚函数。因此,LuaStateManager使用luaplus类实现此接口,并按原样封装LuaState对象。
因此,当一个对象用lua注册自己并将其所有方法抛出到metatable时,我必须做这样的事情:
metaTable.RegisterObjectDirect(“Move”, (Actor*)0, &Actor::Move);
如果我可以访问StateManager接口中的底层状态对象,这将是很好的,因为它将从Actor类本身调用,因此可以保证强制转换。不幸的是,我需要以某种方式将此信息传递给LuaState :: RegisterFunction方法,因此我不必公开LuaState对象并将我的类耦合到它。据我所知,没有办法传递有关要转换为哪种类的信息。
有任何机构有什么建议吗?我想过尝试使用模板化函数来执行强制转换,但我知道你不能拥有模板的函数指针,所以这就是窗外。谢谢!