在运行时执行“真正的”动态转换?

我正在为这个学校项目开发一个灵活的脚本系统,但是遇到了一个难题。问题是:我有一个脚本状态管理器接口,任何脚本状态都将实现它(当前正在实现lua,但希望稍后能够添加python)。它具有用于诸如DoFile,DoString,RegisterObject和RegisterFunction等内容的纯虚函数。因此,LuaStateManager使用luaplus类实现此接口,并封装了LuaState对象,如它所应该的那样。

因此,当对象向lua注册自身并将其所有方法丢入元表时,我必须这样做:

metaTable.RegisterObjectDirect(“Move”, (Actor*)0, &Actor::Move);

如果我可以访问StateManager接口中的基础状态对象,那么这将是可以接受的,因为它将从Actor类本身调用,因此可以保证转换。不幸的是,我需要以某种方式将此信息传递给LuaState :: RegisterFunction方法,以便我不必公开LuaState对象并将我的类与其耦合。就我所看到的,似乎没有办法传递关于要将类别转换为哪种的信息。

有人有任何建议吗?我考虑过尝试使用带有模板函数来执行转换,但我知道您无法将函数指针指向模板,因此这是无法实现的。谢谢!

点赞