我有一个带有整数参数的模板类,但我只知道运行时的模板参数。是否有在运行时创建模板类的最佳实践?
我想出的解决方案是创建一个模板类的抽象基类,它提供接口并有一个适配器类,它创建模板类并将其存储在基类类型的指针中。
class MyInterface {
virtual void doSomething(...) = 0;
}
template <int T>
class MyTemplateClass : public MyInterface {
void doSomething(...) { ... };
}
class TemplateAdapter {
MyInterface* template_class;
Template(int n) {
switch(n) {
case 1:
template_class = new MyTemplateClass<1>();
break;
case 2:
template_class = new MyTemplateClass<2>();
break;
case 3:
template_class = new MyTemplateClass<3>();
break;
[...]
}
}
void doSomething() {
template_class->doSomething();
}
}
现在,虽然这确实有效并产生了正确的结果,但它非常慢。使用适配器的速度几乎是使用模板类的两倍。很明显,它必须要慢一些,但这比我预期的要慢得多。
这么大的性能损失从何而来?你知道如何动态创建一个性能更好的模板类吗?
任何帮助是极大的赞赏!谢谢,佩德罗