我有一個帶整型參數的模板類,但我只知道運行時的模板參數。在運行時創建模板類是否有最佳做法?C++動態模板創建
我想到的解決方案是創建模板類的抽象基類,該類提供接口並具有適配器類,該類創建模板類並將其存儲在類型爲基類。
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();
}
}
現在,雖然這可以工作併產生正確的結果,但它非常緩慢。使用適配器的速度幾乎是使用模板類的兩倍。很明顯,它必須稍微慢一些,但這比我預期的要慢得多。
性能這個巨大的損失來自哪裏?你知道如何動態地創建一個性能更好的模板類嗎?
任何幫助,非常感謝! 謝謝, 佩德羅
模板!=運行時。你正在使用這個工作的錯誤工具。 – EJP
我希望你在實際代碼中使用'unique_ptr'或類似的東西:) –
正如所寫,它很難固定下來,因爲任何耗費時間的事情都會在代碼中被省略。你爲什麼首先使用模板來做這件事?模板並不適合這一點,並且「我只知道運行時的模板參數」這個陳述就是一個很好的指示。 – WhozCraig