不知道如何正确描述帖子标题的问题。这是我遇到的问题。我们有一个接口,将由我们的LuaStateManager
类实现,以将函数注册到LuaPlus::LuaState
. 问题是这些函数可能有任何签名。
LuaPlus 允许你用它的LuaObject::RegisterDirect
方法注册任何函数。它可以做到这一点,因为它使用模板。但是,我们必须将其封装LuaState
在一个具有纯虚函数的接口中。
所以我们的想法是要有一个函数来LuaStateManager
实现:
IScriptState::RegisterFunction( /* What should go here? */ )
但是,您可能会看到,无法指定应将哪种类型的参数传递给此函数,因为它可能是任何函数签名。我们不能像 LuaPlus 那样使用模板,因为虚函数不能被模板化。我们也不能对整个LuaStateManager
类或IScriptState
接口进行模板化,因为对于传递的每种类型的函数,它都会生成一个全新的脚本状态,并且没有一个函数会驻留在一起。
过去是如何解决此类问题的?目前我们正在使用一种蛮力方法,它只是将我们所有的导出都扔到一个用户可以从中派生和填写的结构中。这样他们就会知道他们正在使用哪种脚本语言,并且能够直接使用LuaStateManager
而不是IScriptState
界面,但这完全是一个草率的“黑客”解决方案。