У меня есть класс шаблонов с целочисленным параметром, но я знаю только параметр шаблона во время выполнения. Есть ли какая-либо лучшая практика для создания классов шаблонов во время выполнения?Создание динамического шаблона 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();
}
}
Теперь, когда это действительно работает и дает правильные результаты, это очень медленно. Это почти вдвое медленнее, чем использование класса шаблона. Понятно, что это должно быть несколько медленнее, но это намного медленнее, чем я ожидал.
Откуда эта большая потеря производительности? И знаете ли вы, как динамически создавать класс шаблонов с лучшей производительностью?
Любая помощь очень ценится! Спасибо, Pedro
Шаблоны! = Время выполнения. Вы используете неправильный инструмент для этой работы. – EJP
Надеюсь, вы используете 'unique_ptr' или аналогичный код в реальном коде :) –
Как написано, его трудно подкрепить, так как все, что было бы трудоемким, в коде, вы легко опускаете. Почему вы делаете это с помощью шаблонов в первую очередь? Шаблоны не подходят для этого, и утверждение «Я знаю только параметр шаблона во время выполнения» является хорошим показателем этого. – WhozCraig