У меня есть класс, хранящий сумму фиксированного размера данныхАльтернатива виртуальных шаблонов
template<size_t SIZE> class Data {...};
Теперь у меня есть различные алгоритмы для генерации данных (например, псевдослучайные генераторы):
class PseudoRandom1 {
template<size_t SIZE> Data<SIZE> generate();
};
class PseudoRandom2 {
template<size_t SIZE> Data<SIZE> generate();
};
Теперь я хочу имеют динамическое решение о том, какой из этих генераторов вызывать. Использование виртуальных шаблонов (которые, как я знаю, не возможно), было бы следующее:
class Generator {
virtual template<size_t SIZE> Data<SIZE> generate() = 0;
};
class PseudoRandomX : public Generator {
template<size_t SIZE> Data<SIZE> generate() override {...}
};
К сожалению, я не могу изменить параметр SIZE класса данных, чтобы быть параметром выполнения без шаблона. Кроме того, мне нужно, чтобы фактический экземпляр генератора был временем выполнения, потому что пользователь может выбрать алгоритм генератора. Если возможно, я бы предпочел решение для типов (то есть без boost :: any).
Я знаю, что виртуальные шаблоны невозможны. Есть ли другой способ решить эту проблему?
Можете ли вы шаблон генератор? – Jarod42
Вы говорите, что SIZE определяется во время выполнения? – zdan
Можно ли составить жесткий список потенциальных 'SIZE? Если это так, есть несколько интересных трюков, которые могут работать за кулисами. –