做纯虚拟模板功能的替代方法

时间:2019-03-03 04:23:32

标签: c++ templates virtual

因此,在设置我的脚本库一段时间后,请重新看一下它。并且,它起作用。我现在的问题是试图将其打包到一个抽象库中。

我的问题在于实现。总体目标是为每个脚本引擎创建一个DLL,并根据每个脚本的需要对其进行加载和绑定。

现在,我可以执行:

SqurrelEnviroment* e = new Squrrelnviroment();

更改为:

ScriptEnviroment* e = loadFromDll("Squrrel.dll");

那很好,现在可以进行更改了

SqurrelClass<MyClass>* myclass = e->bindClass<MyClass>("MyClass");
myclass->bindFunction(&MyClass::Foo,"foo");

scriptfile.nut

local temp = MyClass();
temp.foo();

里面有一些复杂的表绑定和其他函数调用。 现在,当我将其转换为使用基类时,问题开始出现。最初,我预成型:

template<class T>
SqurrelClass<T>* SqurrelEnviroment::bindClass(const std::string& classname);

但是当我将其转换为使用更多的基类时,我开始运行虚拟模板函数。

template<class T>
ScriptClass<T>* ScriptEnviroment::bindClass(const std::string& classname) = 0;

在网络上喜欢提醒我是不可能的。

我尝试过的每种解决方法都不适合我的实现。我知道松鼠的其他绑定实用程序。这是为了更广泛,并使用“表格”数据绑定样式接受其他语言。

我尝试过的事情:

  1. 将我的ScriptEnviroment类设置为具有以下外部函数 然后在新的SqurrelEnviroment中定义。有效,但仅适用于 语言。如果我加载另一个dll,我会遇到问题。
  2. 使用以下命令:static_cast (* this).template _method();也会产生相同的问题。
  3. 最常见的解决方法是将模板从方法级别移至类级别。但这行不通。

那还有什么替代品?我希望仍然能够为每种语言使用已经存在的绑定实用程序。我能想到的唯一解决方案是为每种语言编写自己的绑定实用程序,这完全违背了该目的。

0 个答案:

没有答案