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