整数パラメーターを持つテンプレート クラスがありますが、実行時のテンプレート パラメーターしかわかりません。実行時にテンプレート クラスを作成するためのベスト プラクティスはありますか?
私が思いついた解決策は、テンプレートクラスの抽象基本クラスを作成することです。これは、インターフェイスを提供し、テンプレートクラスを作成して基本クラスの型のポインターに格納するアダプタークラスを持ちます。
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();
}
}
これは機能し、正しい結果が得られますが、非常に遅いです。アダプターを使用すると、テンプレート クラスを使用するよりもほぼ 2 倍遅くなります。多少遅くする必要があることは明らかですが、これは予想よりもはるかに遅いです。
このパフォーマンスの大幅な低下はどこから来るのでしょうか? また、よりパフォーマンスの高いテンプレート クラスを動的に作成する方法を知っていますか?
どんな助けでも大歓迎です!ありがとう、ペドロ